在Python的函数调用中组合单参数变量和多参数变量



我编写了以下函数来返回字典的子集,但希望在输入参数中至少提供一个键。

def getProperty(self,x, *key):
    key = [k for k in key]
    key.insert(0,x)
    return {k:self.__properties[k] for k in key if k in self.__properties}

代码有效。

我知道插入并不是真正必要的,因为字典元素没有排序。我真正希望我能做的是摆脱第一个for循环,该循环通过从多参数元组中提取元素来创建列表。

类似的东西

key = [x] + [key]

但它不起作用。

这应该可以满足您的需要:

def getProperty(self,x, *key):
    key = (x,)+key
    return {k:self.__properties[k] for k in key if k in self.__properties}

如果你想坚持至少有一个参数,那么你应该assert args元组不是空的

>>> def get_property(*args):
...     assert (args != ()), "There must be at least one argument"
...     print(args)
...
>>> get_property('a')
('a',)
>>> get_property('a', 'b')
('a', 'b')
>>> get_property()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "<stdin>", line 2, in get_property
AssertionError: There must be at least one argument
>>>

因此,在调用该方法时,不需要做任何花哨的事情来提供一个单独的参数,并且如果需要,可以在调用语句中捕获AssertionError

最新更新