我习惯于在Python中定义函数/方法如下:
def my_function(arg1=None , arg2='default'):
... do stuff here
如果我不提供arg1
(或arg2
),则会分配默认值None
(或'default'
)。
我能否像这样指定关键字参数,但不带默认值?如果未提供该参数,我希望它引发一个错误。
我习惯于在Python中定义函数/方法如下:
def my_function(arg1=None , arg2='default'):
... do stuff here
如果我不提供arg1
(或arg2
),则会分配默认值None
(或'default'
)。
我能否像这样指定关键字参数,但不带默认值?如果未提供该参数,我希望它引发一个错误。
在现代的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
func("fred", "bob")
可以使用标准关键字参数。 - tdelaneydef func(*args, name1, name2, **kwargs)
。 - HerpDerpington可以将任何参数作为关键字表达式传递,无论它是否具有默认值:
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的答案,但这似乎不是你真正想问的问题。