python - 有没有办法将默认参数设置为等于另一个参数值?

标签 python python-3.x

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

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/

相关文章:

python - 使用 eval() 函数,如何评估 python 中观察到的代码的表达式

python - 如何向 UserDict 提供类型提示?

Python configparser 不会接受没有值的键

python - 将十六进制字符串转换为 bytes 函数的正确形式

python-3.x - 如何在 AWS EMR 上设置 PYTHONHASHSEED

Python共享库: RTLD_GLOBAL segfault

Python - 通过 SSH 运行时字符串变形

python - Elixir 的 Pylons

python - 我的代码给出的 Key error beyond a limit

python - 值错误: malformed node or string error when parsing lists from a text file