gpt4 book ai didi

python - Python中参数的强制命名

转载 作者:IT老高 更新时间:2023-10-28 21:11:28 32 4
gpt4 key购买 nike

在 Python 中你可能有一个函数定义:

def info(object, spacing=10, collapse=1)

可以通过以下任何一种方式调用:

info(odbchelper)                    
info(odbchelper, 12)
info(odbchelper, collapse=0)
info(spacing=15, object=odbchelper)

感谢 Python 允许任意顺序的参数,只要它们被命名。

我们遇到的问题是,随着我们的一些较大函数的增长,人们可能会在 spacingcollapse 之间添加参数,这意味着可能会出现错误的值到未命名的参数。此外,有时并不总是清楚需要输入什么。我们正在寻求一种强制人们命名某些参数的方法——不仅仅是一个编码标准,理想情况下是一个标志或 pydev 插件?

因此在上述 4 个示例中,只有最后一个会通过检查,因为所有参数都已命名。

很可能我们只会为某些功能打开它,但任何关于如何实现它的建议 - 或者如果它甚至可能的话,我们将不胜感激。

最佳答案

在 Python 3 中 - 是的,您可以在参数列表中指定 *

来自 docs :

Parameters after “*” or “*identifier” are keyword-only parameters andmay only be passed used keyword arguments.

>>> def foo(pos, *, forcenamed):
... print(pos, forcenamed)
...
>>> foo(pos=10, forcenamed=20)
10 20
>>> foo(10, forcenamed=20)
10 20
>>> foo(10, 20)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: foo() takes exactly 1 positional argument (2 given)

这也可以和**kwargs结合:

def foo(pos, *, forcenamed, **kwargs):

完整示例:

def foo(pos, *, forcenamed ):
print(pos, forcenamed)

foo(pos=10, forcenamed=20)
foo(10, forcenamed=20)
# basically you always have to give the value!
foo(10)

输出:

Traceback (most recent call last):
File "/Users/brando/anaconda3/envs/metalearning/lib/python3.9/site-packages/IPython/core/interactiveshell.py", line 3444, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-12-ab74191b3e9e>", line 7, in <module>
foo(10)
TypeError: foo() missing 1 required keyword-only argument: 'forcenamed'

所以你不得不总是给出值(value)。如果你不调用它,你就不必做任何其他名为参数强制的事情。

关于python - Python中参数的强制命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2965271/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com