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

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没有定义,但是有没有一种优雅的方式来完成我在这里try 的事情呢?如果还不清楚,我想让默认的setLength值等于传入的第一个参数.谢谢

推荐答案

不,函数关键字参数默认值是在函数为defined时确定的,而不是在函数执行时确定的.

将默认值设置为None并检测:

def perms(elements, setLength=None):
    if setLength is None:
        setLength = elements

如果需要将None指定为参数,请使用不同的sentinel值:

_sentinel = object()

def perms(elements, setLength=_sentinel):
    if setLength is _sentinel:
        setLength = elements

现在,呼叫者可以将setLength设置为None,这将不会被视为默认值.

Python-3.x相关问答推荐

"安装serial vs安装psyserial header,"""

一种基于绝对排序值的极框索引和列定位的Python方法

为什么vs code返回错误—LocaleError:int对象没有属性where,但相同的代码运行在Google Colab上没有任何问题''''

Python根据阈值对数字进行分组

Python将类实例变量转换为嵌套 struct

如何绘制交叉验证的AUROC并找到最佳阈值?

为什么 tkinter 在 tkinter 窗口外计算鼠标事件?

Pandas教程:如何更新行内数值的位置

如何将多输入数据加载器传递给单输入模型

以不规则频率识别数据框日期时间列上缺失的日期,并用关联值填充它们

BeautifulSoup 和 pd.read_html - 如何将链接保存到最终数据框中的单独列中?

RGB 图像中最主要的 colored颜色 - OpenCV / NumPy / Python

日志(log)模块不适用于 Python3

运行 PyCharm 测试时如何解决django.core.exceptions.ImproperlyConfigured:找不到 GDAL 库?

PySpark python 问题:Py4JJavaError: An error occurred while calling o48.showString

Python图例属性错误

用于 Django 应用程序的 Cython:它会工作吗?

导入父目录进行简要测试

使用 asyncio 的多个循环

Python,Docker - ascii编解码器无法编码字符