有时,使用默认参数(即空列表)似乎很自然.然而,Python在这些情况下会出现意外行为.
例如,我有一个功能:
def my_func(working_list = []):
working_list.append("a")
print(working_list)
Run Code Online (Sandbox Code Playgroud)
第一次使用默认值调用它将起作用,但之后的调用将使用不断更新的列表.
那么,获得我想要的行为的pythonic方法是什么(每个调用都有一个新的列表)?
是否可以在同一函数定义中将函数参数的默认值定义为另一个参数?就像是:
def func(a, b=a):
print a, b
Run Code Online (Sandbox Code Playgroud)
但那没用.
我们都知道'可怕的可变默认参数'
我惊讶地发现至少有一个使用可变默认参数的内置函数deepcopy(和相关的__deepcopy__).
def deepcopy(x, memo=None, _nil=[]):
这只是模块作者的一个忽视,还是有一些特殊deepcopy的行为证明了这一点?
我想用一些可选参数定义一个函数,比如说A(强制性)和B(可选)。如果没有给定B,我希望它取与A相同的值。我该怎么做?
我已经尝试过了,但是不起作用(未定义名称“ B”):
def foo(A, B=A):
do_something()
Run Code Online (Sandbox Code Playgroud)
我知道参数的值未在函数主体之前分配。
我有以下函数声明:
def set_data(obj=None, name='delp', type=None):
Run Code Online (Sandbox Code Playgroud)
是否有一个 python 快捷方式,其中类型等于“名称”值(默认通过 r)如果是 None ?