你能不提供关键字参数而不提供默认值吗?

问题描述 投票:9回答:2

我习惯在Python中有这样的函数/方法定义:

def my_function(arg1=None , arg2='default'):
    ... do stuff here

如果我不提供arg1(或arg2),则分配None(或'default')的默认值。

我可以像这样指定关键字参数,但没有默认值吗?如果没有提供参数,我希望它会引发错误。

python kwargs
2个回答
12
投票

你可以在现代Python(3,即):

>>> def func(*, name1, name2):
...     print(name1, name2)
...     
>>> func()
Traceback (most recent call last):
  File "<ipython-input-5-08a2da4138f6>", line 1, in <module>
    func()
TypeError: func() missing 2 required keyword-only arguments: 'name1' and 'name2'    
>>> func("Fred", "Bob")
Traceback (most recent call last):
  File "<ipython-input-7-14386ea74437>", line 1, in <module>
    func("Fred", "Bob")
TypeError: func() takes 0 positional arguments but 2 were given

>>> func(name1="Fred", name2="Bob")
Fred Bob

11
投票

任何参数都可以与关键字表达式一样给出,无论它是否具有默认值:

def foo(a, b):
    return a - b
foo(2, 1)         # Returns 1
foo(a=2, b=1)     # Returns 1
foo(b=2, a=1)     # Returns -1
foo()             # Raises an error

如果你想强制参数只是关键字,那么请参阅DSM的答案,但这看起来并不像你真正要求的那样。

© www.soinside.com 2019 - 2024. All rights reserved.