为什么 fromkeys 是一种方法而不是内置函数?
Why is fromkeys a method rather than a built-in function?
为什么 dict
的 fromkeys
方法 class 是 class 的方法而不是独立的内置函数?
据我所知,它只是 returns 一个基于传递给方法的参数的新字典,并且不受它调用的 class 实例(字典)的影响从。通常的实现只是直接使用 class 名称 dict
而不是首先指定 class 实例。
我尝试了以下语句,但它们都一直忽略了我提到的 class 实例。
>>> dict.fromkeys((1,2))
{1: None, 2: None}
>>> {1: "Hey"}.fromkeys((1,2))
{1: None, 2: None}
>>> {1: "Hey"}.fromkeys((2,))
{2: None}
Python documentation 除了参数的作用外,也只字未提。它没有提到 class 实例的任何使用,但也没有声明它是无目的的。
我认为原因可能与名称空间管理有关。用户创建的函数 fromkeys
不会影响内置的 class 方法,对吗?
我只是想确保我没有错过 class 实例可能具有的任何目的,以避免我的代码中将来出现错误
dict.from_keys
的结果仅依赖于 dict
本身和传递给函数的参数。它不使用存储在现有实例中的任何信息,因此没有理由提供一个。
至于为什么它不是函数,dict.from_keys
仍然可以用于 dict
的 子类 ,而无需做任何不同的事情。
>>> from collections import OrderedDict
>>> type(OrderedDict.fromkeys([1,2,3]))
<class 'collections.OrderedDict'>
Counter.fromkeys
不会工作,但那是因为 Counter.fromkeys
被特别 覆盖 以建议替代方案。
粗略地说,你可以认为dict.fromkeys
是这样实现的:
@classmethod
def fromkeys(cls, keys, value=None):
return cls((k, value) for k in keys)
像
这样的电话
{'a': 1}.fromkeys(['b'])
等同于
dict.fromkeys(dict, ['b']) # First argument is type({'a': 1}), not dict
为什么 dict
的 fromkeys
方法 class 是 class 的方法而不是独立的内置函数?
据我所知,它只是 returns 一个基于传递给方法的参数的新字典,并且不受它调用的 class 实例(字典)的影响从。通常的实现只是直接使用 class 名称 dict
而不是首先指定 class 实例。
我尝试了以下语句,但它们都一直忽略了我提到的 class 实例。
>>> dict.fromkeys((1,2))
{1: None, 2: None}
>>> {1: "Hey"}.fromkeys((1,2))
{1: None, 2: None}
>>> {1: "Hey"}.fromkeys((2,))
{2: None}
Python documentation 除了参数的作用外,也只字未提。它没有提到 class 实例的任何使用,但也没有声明它是无目的的。
我认为原因可能与名称空间管理有关。用户创建的函数 fromkeys
不会影响内置的 class 方法,对吗?
我只是想确保我没有错过 class 实例可能具有的任何目的,以避免我的代码中将来出现错误
dict.from_keys
的结果仅依赖于 dict
本身和传递给函数的参数。它不使用存储在现有实例中的任何信息,因此没有理由提供一个。
至于为什么它不是函数,dict.from_keys
仍然可以用于 dict
的 子类 ,而无需做任何不同的事情。
>>> from collections import OrderedDict
>>> type(OrderedDict.fromkeys([1,2,3]))
<class 'collections.OrderedDict'>
Counter.fromkeys
不会工作,但那是因为 Counter.fromkeys
被特别 覆盖 以建议替代方案。
粗略地说,你可以认为dict.fromkeys
是这样实现的:
@classmethod
def fromkeys(cls, keys, value=None):
return cls((k, value) for k in keys)
像
这样的电话{'a': 1}.fromkeys(['b'])
等同于
dict.fromkeys(dict, ['b']) # First argument is type({'a': 1}), not dict