有没有办法将默认参数设置为等于另一个参数值?
问题内容:
例如,我有一个基本方法,它将返回排列列表。
import itertools
def perms(elements, set_length=elements):
data=[]
for x in range(elements):
data.append(x+1)
return list(itertools.permutations(data, set_length))
现在我知道,由于elements
未定义第二个代码,因此该代码在当前状态下将无法运行,但是有没有一种优雅的方式来完成我在这里要做的事情?如果仍然不清楚,我想使默认setLength
值等于传入的第一个参数。谢谢。
问题答案:
不,函数关键字参数默认值是在 定义 函数时 确定的 ,而不是在执行函数时确定的。
将默认值设置为None
并检测以下内容:
def perms(elements, setLength=None):
if setLength is None:
setLength = elements
如果需要能够指定None
作为参数,请使用其他哨兵值:
_sentinel = object()
def perms(elements, setLength=_sentinel):
if setLength is _sentinel:
setLength = elements
现在,呼叫者可以设置setLength
为None
,它将不会被视为默认设置。