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
中有什么让您想要别的东西?当前语法有什么问题?是打字的工作量吗?需要多少空间?