【发布时间】:2020-06-26 16:26:03
【问题描述】:
我看到一篇博文提到“使用func.__code__.co_consts 检查函数中定义的所有常量”。
def func():
return 1 in {1,2,3}
func.__code__.co_consts
(None, 1, frozenset({1, 2, 3}))
为什么返回frozenset?
def func():
return 1 in [1,2,3]
func.__code__.co_consts
(None, 1, (1,2,3))
为什么它返回 tuple 而不是列表?从__code__.co_consts 返回的每个对象都是不可变的。为什么可变的常量是不可变的?为什么返回元组的第一个元素总是None?
【问题讨论】:
-
不可变是不可改变的。这就是为什么!
-
也许线索在 consts 中?
-
@quamrana 我是初学者。介意给我详细解释一下吗?或我可以阅读它的链接。
-
在 C/C++ 中有一个关键字 const 可以使数据看起来不可变。 (en.cppreference.com/w/cpp/language/cv) 在 python 中,它是通过拥有没有变异方法的类型来完成的。
-
@quamrana 感谢您的洞察力。这很有帮助。 ;) 我会查看附加的链接。
标签: python list set python-internals