为什么dict
类的fromkeys
方法是该类的方法,而不是独立的内置函数?
据我所知,它只根据传递给方法的参数返回一个新的字典,不受调用它的类实例(字典(的影响。通常的实现只是直接使用类名dict
,而不是首先指定类实例。
我尝试过以下语句,但它们都一直忽略了我提到的类实例。
>>> dict.fromkeys((1,2))
{1: None, 2: None}
>>> {1: "Hey"}.fromkeys((1,2))
{1: None, 2: None}
>>> {1: "Hey"}.fromkeys((2,))
{2: None}
Python文档除了参数的作用之外也没有提到任何东西。它没有提到类实例的任何使用,但也没有声明它的目的性。
我相信原因可能与命名空间管理有关。用户创建的函数fromkeys
不会以这种方式影响内置类方法,对吧?
我只是想确保我没有错过类实例可能具有的任何用途,以避免我的代码中未来的错误
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