随记-简单而优雅的 namedtuple

简单而优雅

人活着就是累,简称人类。开个玩笑,活的简单一些也挺好。
人的一些基本属性,简单来说就是 姓名、年龄、性别,就用这三个吧。
如果要对一些人进行描述,可以使用类、使用数组、使用字典。

class Person(object):

    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    def __str__(self):
        return "name:%s \n" % self.name \
               + "age:%s \n" % self.age \
               + "sex:%s \n" % self.sex

if __name__ == '__main__':
    # test_field_names_str()
    person_class = Person("张三", 18, "难")

    print(person_class) 
    
	# 获取名字
    print(person_class.name)

数组

person_list = [
        ["张三", 18, "难"]
        ,["李四", 28, "女"]
    ]

# 获取名字
name = person_list[0][0]

字典

	person_dict = {
        "person_01": {
            "name": "张三",
            "age": 18,
            "sex": "难",
        }, 
        "person_02": {
            "name": "李四",
            "age": 28,
            "sex": "女",
        },
        
    }
    
    # 获取名字
    name = person_dict["person_01"]["name"]

这三种对person 的处理都可以,但也有优缺点。

  • 类:比较庞大,而且如果只是属性读写,有点大材小用
  • 列表:相较于类小了,但是读写稍有不便,需要通过索引获取值,不利于维护
  • 字典:和列表类似,不便于维护

除了这三种方式,难道就没有其他的简单而优雅的实现吗?
当然是有的,namedtuple !!!从名字看named tuple,有名字的元组。



from collections import namedtuple

def test_field_names():

    field_names_str = "name,age,sex"
    Person = namedtuple("Person", field_names_str)

    person_01 = Person("张三", 18, "难")

    print(person_01.name)

    field_names_list = ["name", "age", "sex"]
    Person = namedtuple("Person", field_names_list)

    person_01 = Person("张三", 18, "难")

    print(person_01.name)

    # 像元组一样使用
    print(person_01[0])

    # 解包
    name,age,sex = person_01
    print(name,age,sex)

    # namedtuple 转成字典
    person_dict = person_01._asdict()
    print(person_dict)

    # 字典转成 namedtuple
    person_02 = Person(**person_dict)
    print(person_02.name)

    # 替换,返回一个新的 namedtuple
    person_03 = person_02._replace(name="李四")
    print(person_03.name)

if __name__ == '__main__':
    test_field_names()


到此结 DragonFangQy 2022.4.1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值