我有一个程序,它使用一个带有很多关键字参数的函数,这些函数都默认为None
,并且希望有一个比分配每个参数更好的方法。这是函数声明:
def __init__(self, includes=None, main=None,
functions=None, classes=None,
lambdas=None, variables=None,
values=None):
正如你所知,这是相当长的,我希望有像
这样的东西def __init__(self, includes=main=functions=classes=lambdas=variables=values=None):
更短更容易编写。
有人能回答这个问题吗?这真的很有帮助。
答案 0 :(得分:3)
你显然不能,这是一个语法错误。
请考虑使用**kwargs
,正如@aryamccarthy建议的那样。
您可以检查是否只接受所需名称:
def foo(**kwargs):
known_args = set(['pizza', 'burger', 'sausage'])
extra_args = set(kwargs) - known_args
if extra_args:
raise ValueError('Unknown argument names: %r' % extra_args)
# proceed as normal
答案 1 :(得分:2)
我在评论中提到这是你应该更喜欢**kwargs
的时候。它是一个字典,可以捕获传递给函数的所有命名参数。以下是您如何使用它:
def __init__(self, **kwargs):
if includes in kwargs:
do_something()
if main in kwargs:
do_something_else()
...
按照您通常使用的方式处理每个参数:
if includes is not None:
do_something()
if main is not None:
do_something_else()
...
您所询问的内容在语法上是不可能的(并且类似不存在),但这会实现相同的语义结果。
答案 2 :(得分:0)
您可以将新变量设置为等于None
,然后使用:
a = None
def __init__(self, includes=a, main=a, functions=a, classes=a, lambdas=a, variables=a, values=a):
哪会显着缩短它,否则,不可能。