gpt4 book ai didi

python - 函数的可变对象参数位于何处?有符号表吗? (Python教程4.7.1)

转载 作者:行者123 更新时间:2023-11-28 20:57:43 25 4
gpt4 key购买 nike

遍历 python tutorial, in section 4.7.1 ,一个可变的默认参数存储在某处,但我似乎无法使用 dir()globals()locals() 找到它或 f.__dict__。我指的是这段代码:

def f(a, L=[]):
L.append(a)
return L

表现为:

>>> print(f(1))
[1]
>>> print(f(2))
[1, 2]
>>> print(f(3))
[1, 2, 3]

我希望在函数的命名空间中看到它,比如当我执行 dir(f) 但它不在那里。

我看过this但这远远超出了我的预期。

最佳答案

根据 Python Data Model :

__defaults__ A tuple containing default argument values for those arguments that have defaults, or None if no arguments have a default value

>>> def foo(a=[]):
... a.append(1)
...
... foo()
... foo.__defaults__
([1],)

对于仅关键字参数,还有 __kwdefaults__

>>> def foo(a=1, *, b=2):
... pass
...
... foo.__defaults__, foo.__kwdefaults__
((1,), {'b': 2})

请注意,Python 中的内容不一定存储在可访问的任何位置。例如,对象的引用计数不能用作属性。它仅存在于 CPython 实现 的 C 层,需要 builtin magic访问。

事实上,__defaults__ 也不是“真正的”属性。它是一个内置属性,可从实现存储它们的任何位置获取默认值。

# python3
>>> type(foo).__defaults__
<attribute '__defaults__' of 'function' objects>
# pypy3
>>>> type(foo).__defaults__
<getset_descriptor object at 0x00000001110adc98>

关于python - 函数的可变对象参数位于何处?有符号表吗? (Python教程4.7.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52413797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com