在创建自己的类时,我无法确定何时应该或不应该使用关键字参数。
是否有任何特定情况或一般经验法则?
据我所知:
优点:
缺点:
请参见下面的MyClassA和MyClassB,它们说明了这两点:
class MyClassA():
def __init__(self,name,city):
self.name = name
self.city = city
x = MyClassA('Andy','New York')
class MyClassB():
def __init__(self,name=None,city=None):
self.name = name
self.city = city
y = MyClassB(city='New York',name='Andy')
答案 0 :(得分:3)
实际上,在两种情况下,您都可以将参数作为关键字参数传递:
x = MyClassA(city='New York', name='Andy')
也可以。这:
x = MyClassA(name='Andy', city='New York')
也可以。
一般经验法则(IMHO):如果在呼叫站点很明显有哪些参数,则-不需要关键字,否则-显式优于隐式。
仅供参考,您可以像这样强制使用关键字args:
def fun(positional_arg1, *, keyword_only_arg1, keyword_only_arg2): ...
这意味着您不能使用位置参数调用fun
:
>>> fun(1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: fun() takes 1 positional argument but 3 were given
,您必须提供所有参数:
>>> fun(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: fun() missing 2 required keyword-only arguments:
'keyword_only_arg1' and 'keyword_only_arg2'
所以调用fun
的唯一方法是:
fun(1, keyword_only_arg1=1, keyword_only_arg2=3)
答案 1 :(得分:0)
在两种情况下,您可以使用argument=value
:
1-使用具有很多参数但只想设置特定参数的函数时
def function(a=None, b=0, c=1, d=None, ......................z=None):
.....
return value
function(d='walk', g=4)
2-如chepner
所示,当您不知道参数的顺序时function(13,14, 'default', 'walk',......)
function(a=13, d='walk')