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