为什么fromkeys是一个方法而不是一个内置函数



为什么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

最新更新