python - 指定参数列表,列表中至少有一个参数

标签 python function arguments parameter-passing optional-parameters

所以,我有一些函数接受一组参数,其中至少有一个参数,但也可能是整个参数列表。我知道定义此方法的几种方法,但我正在尝试确定我可以使用的各种替代方案以及每种方法的各种优点是什么。

我正在尝试找出可以使用哪些可能的原型(prototype)来定义这个论点。我考虑了以下几点:

def func(arg_1, *args):
    arg_list = (arg_1,) + args
    # do stuff with arg_list

以及

def func(*args):
    if len(args) == 0: raise Exception("Not enough arguments specified")
    # do stuff with args

是否有其他方法可以指定一个函数,该函数采用至少一个参数的参数列表?

最佳答案

Python 3.5 你可以(我相信它从 3.0 开始就存在,当 PEP 3102 出现时),但有限制,定义了额外的参数没有默认值 并且 在调用定义的函数时以关键字形式提供

这是通过添加 * 作为分隔符并在其后添加所需参数来完成的:

def foo(*, must_specify, **kwargs): pass

在不提供 must_specify = 'specified' 形式的关键字参数的情况下调用 foo() 将导致提示该要求的 TypeError对于该特定参数:

foo()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-45-624891b0d01a> in <module>()
----> 1 foo()

TypeError: foo() missing 1 required keyword-only argument: 'must_specify'

可以单独提供位置参数,但是不能提供 *args 形式的位置分组参数,即:

def foo(pos_arg, *, must_specify, **kwargs): pass

很好,但是:

def foo(pos_arg, *args, *, must_specify, **kwargs): pass

是一个语法错误。这样做是因为 * 本质上与 *args 的“一次性”形式相同。

无论如何,没有其他语法方式(据我所知)可以满足您希望的限制。如果使用 kwargs 对您来说太麻烦,或者如果您正在使用 Py2 并且坚决要切换,那么评论中建议的解决方案是最好的赌注。

关于python - 指定参数列表,列表中至少有一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35136016/

相关文章:

python - ANTLR4 因 Lexer/Parser 错误而终止 Python

python - dict_keys 是生成器函数吗?

python - 仅从 JSON 文件中抓取选定的字段

json - 使用 Node.js 将 URL/路径转换为 ​​Json

matlab - matlab中的全局变量和参数,哪个最快?

python - 如何在 map 中将项目作为参数列表传递?

列表上的 Python boolean 运算 - 不一致的结果

php - 在函数参数之前使用 & 的目的是什么?

sql - 如何在 DB2 中创建一个返回序列值的函数?

c++ - Wt connect函数,将参数传递给函数,该函数是连接函数参数