例如,我有一个基本方法,将返回排列列表。

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,它将不会被视为默认设置。

关于python - 有没有办法将默认参数设置为等于另一个参数值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17157272/

10-09 17:14