为了账号安全,请及时绑定邮箱和手机立即绑定

namedtuple的_make函数传入dict,将key映射到字段,而不是value,为什么?

# python3.6
from collections import namedtuple
User = namedtuple('User', ['name', 'age', 'height'])

dict_user = {
    'name': '小张',
    'height': 1.75,
    'age' : 18,
}

user = User._make(dict_user)
print(user)

'''
结果为什么是把dict的key,而不是value赋值给了namedtuple的字段,结果如下:
User(name='name', age='height', height='age')
'''


正在回答

3 回答

因为 字典虽然是iterable,但是在迭代的时候,其返回的是key值,而非value值,所以要想使用的是dict的value值,可以像上面说的那样,使用dict的values(),因为该方法得到的是dict的value值的可迭代对象

0 回复 有任何疑惑可以回复我~

https://img1.sycdn.imooc.com//5b4b08fa0001811a10950438.jpg

iterable,next()取值



0 回复 有任何疑惑可以回复我~

namedtuple对象的_make方法内容主要如下:

@classmethod

    def _make(cls, iterable, new=tuple.__new__, len=len):

        result = new(cls, iterable)

其中第二个参数new的默认值为tuple对象的__new__方法,该方法是一个静态方法,用于构建tuple实例且在__init__方法之前调用。

结合你所写的代码:user = User._make(dict_user)

user来自于tuple的new方法通过传入的dict生成,猜测(做了一些小实验)该方法对传入的dict调用了tuple函数,因此导致dict的key部分作为参数传了进去。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

namedtuple的_make函数传入dict,将key映射到字段,而不是value,为什么?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信