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

时间:2015-03-28 09:50:48

标签: python python-3.4 argument-passing

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

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]

但它不起作用。

2 个答案:

答案 0 :(得分:0)

这应该做你需要的:

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

答案 1 :(得分:0)

如果您想坚持至少有一个参数,那么您应该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