Python 我可以为一个值分配多个关键字参数吗?
我有一个程序,它使用了一个包含很多关键字参数的函数,所有这些参数都默认为Python 我可以为一个值分配多个关键字参数吗?,python,python-3.x,function,keyword-argument,Python,Python 3.x,Function,Keyword Argument,我有一个程序,它使用了一个包含很多关键字参数的函数,所有这些参数都默认为None,并且希望有一种比只分配每个参数更好的方法。这是函数声明: def __init__(self, includes=None, main=None, functions=None, classes=None, lambdas=None, variables=None, values=None): 正如你
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):
它要短得多,也更容易写
谁能回答这个问题?这将非常有帮助。我在评论中提到,此时您应该更喜欢
**kwargs
。它是一个字典,它捕获传递给函数的所有命名参数。以下是您如何使用它:
def __init__(self, **kwargs):
if includes in kwargs:
do_something()
if main in kwargs:
do_something_else()
...
a = None
def __init__(self, includes=a, main=a, functions=a, classes=a, lambdas=a, variables=a, values=a):
以通常使用的相同方式处理每个参数:
if includes is not None:
do_something()
if main is not None:
do_something_else()
...
您所问的在语法上是不可能的(并且没有类似的东西存在),但这会得到相同的语义结果。您显然不能,这是一个语法错误 正如@aryamcarthy所建议的,考虑使用
**kwargs
您可以检查是否只接受您想要的名称:
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
您可以将新变量设置为等于
None
,然后使用该变量:
def __init__(self, **kwargs):
if includes in kwargs:
do_something()
if main in kwargs:
do_something_else()
...
a = None
def __init__(self, includes=a, main=a, functions=a, classes=a, lambdas=a, variables=a, values=a):
这将大大缩短它,否则,不,这是不可能的。我认为你做不到,至少我从未见过它。这是一个使用
**kwargs**
可能更好的时候。从语法上来说,你做不到。函数关键字参数由一系列的keyword\u项组成,其形式为name=value
。您不喜欢**kwargs
中有什么让您想要别的东西?当前语法有什么问题?是打字的工作量吗?需要多少空间?