2015-03-13 139 views
3

我用具有像这样的功能/方法定义在Python:你有没有提供默认值的关键字参数?

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

如果我不提供arg1(或arg2)然后None默认值(或'“默认”)被分配。

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

+0

你能举个例子吗? – thefourtheye 2015-03-13 16:22:59

+2

可能相关:https://www.python.org/dev/peps/pep-3102/ – jonrsharpe 2015-03-13 16:24:52

+1

Python的哪个版本? – 2015-03-13 16:26:15

回答

4

您可以在现代的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 
+0

它不是一个简单的替代品,因为'func(“fred”,“bob”)'可以用标准关键字参数工作。 – tdelaney 2015-03-13 16:56:08

+0

我正在使用它的Python 2.7。 – 2015-04-19 14:22:35

3

任何说法可以作为一个关键词表达,它是否有一个默认:

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 

如果你想强制的参数是关键字-只有,然后看到帝斯曼的答案,但这似乎并不像你真的问。

相关问题