在 Python 的函数调用中组合单参数和多参数变量
Combine single and multi argument variables in a function call for Python
我将以下函数写入 return 字典的一个子集,但想坚持在输入参数中至少提供一个键。
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
。
我将以下函数写入 return 字典的一个子集,但想坚持在输入参数中至少提供一个键。
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
。