不知道有啥用的namedtuple

《深入理解python特性》和《流畅的python》 都提到了nametuple, 前者更是说这个有多吊,, 我硬是没看出来,哪里让人感到惊艳???

一些操作

from collections import namedtuple

Car = namedtuple('Car', ['color', 'mileage'])
# Car = namedtuple('Car', 'color mileage')
# 也可以字符串格式传值, 内部通过split分割
my_car = Car('red', 12345)
print(my_car.color)    # 可以直接.出属性值
print(my_car[1])       # 也可以通过索引取出属性值

# ########################################

# 解包
color, mileage = my_car
print(color, mileage)  # red 12345

print(*my_car)        # 通过* 解包 red 12345

# ########################################

# 直接打印my_car
print(my_car)
# Car(color='red', mileage=12345)     返回的值也十分友好

 

值得注意的是, nametuple也是元组, 是不可变类型!当试图更改属性值时, 会报错

from collections import namedtuple

Car = namedtuple('Car', ['color', 'mileage'])
my_car = Car('red', 12345)
my_car.color = 'blue'

 

子类化nametuple

可以像其他类一样扩展namedtuple定义的类

from collections import namedtuple

Car = namedtuple('Car', ['color', 'mileage'])


class MyCarWithMethods(Car):
    def hexcoloe(self):
        if self.color == 'red':
            print('#ff0000')
        else:
            return print('#000000')


c = MyCarWithMethods('red', 1234)
c.hexcoloe()

可以实现类的继承, 并通过._fields 添加新的字段

from collections import namedtuple

Car = namedtuple('Car', ['color', 'mileage'])

ElectricCar = namedtuple('ElectricCar', Car._fields + ('charge',))
print(ElectricCar('red', 1234, 45.0))
# ElectricCar(color='red', mileage=1234, charge=45.0)

 

除了内置的_fields方法, 还有其他的内置方法

1) _asdict()

转成字典格式

from collections import namedtuple

Car = namedtuple('Car', ['color', 'mileage'])
my_car = Car('red', '12345')
print(my_car)
# Car(color='red', mileage='12345')
print(my_car._asdict())
# OrderedDict([('color', 'red'), ('mileage', '12345')])

2)_replace()

创建一个元组的副本, 并可以替换一些字段, 注意的是原来的不变

from collections import namedtuple

Car = namedtuple('Car', ['color', 'mileage'])
my_car = Car('red', '12345')
print(my_car)      # Car(color='red', mileage='12345')
print(my_car._replace(color='blue'))  # Car(color='blue', mileage='12345')
print(my_car)      # Car(color='red', mileage='12345')

3)_make()

用来从序列或迭代对象中创建namedtuple的新实例

from collections import namedtuple

Car = namedtuple('Car', ['color', 'mileage'])
print(Car._make(['black', 9999]))

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值