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

Why is fromkeys a method rather than a built-in function?

为什么 dictfromkeys 方法 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