【发布时间】:2023-03-24 22:30:01
【问题描述】:
Python 是duck typed,这通常可以避免在处理原始对象时强制转换 faff。
典型的例子(以及名称背后的原因)是鸭子测试:如果它看起来像鸭子,像鸭子一样游泳,像鸭子一样嘎嘎叫,那么它很可能是鸭子。
然而,一个值得注意的例外是 dict 键/值,它看起来像鸭子,像鸭子一样游泳,但值得注意的是 不像鸭子一样嘎嘎作响。
>>> ls = ['hello']
>>> d = {'foo': 'bar'}
>>> for key in d.keys():
.. print(key)
..
'foo'
>>> ls + d.keys()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "dict_keys") to list
谁能告诉我这是为什么?
【问题讨论】:
-
ls + list(d.keys())? -
I在较旧的 Python 版本中,
dict.keys()是一个列表,但它发生了变化,现在它是一个 dict 视图对象:来自帮助:D.keys() -> a set-like object providing a view on D's keys -
Python 很清楚它不是一个列表:
>>>d.keys()返回dict_keys(['foo'])