【发布时间】:2018-06-10 03:03:07
【问题描述】:
有没有办法使用参数的值来动态设置关键字参数的默认值?我在想这样的事情:
def foo(lst, r = 0, l = len(lst)): #I am referring to the "l = len(lst)" part
print r, l
foo([1,2,3])
这给出了以下回溯:
Traceback (most recent call last):
File "C:/Python27/quicksort.py", line 25, in <module>
def foo(lst, r = 0, l = len(lst)):
NameError: name 'lst' is not defined
可以做类似的事情:
def foo(lst, r = 0, l = None):
if l is None:
l = len(lst)
print r, l
但我希望有一个更优雅的解决方案。有人可以帮忙吗?
【问题讨论】:
-
可能在函数体中将其缩短为
l = l or len(lst)。 -
在定义函数时计算默认参数的值,而不是在调用它时。查看this question的答案
-
有趣。在 Ruby 中,可选参数的默认参数值在调用方法时进行评估,并定义评估顺序(从左到右),以便 OP 的代码按预期工作。我从没想过 Python 是否会有所不同。
-
@cᴏʟᴅsᴘᴇᴇᴅ 这将不允许您通过非空列表传递
l=0。 -
@schwobaseggl 好点。
标签: python parameter-passing keyword-argument