Объедините переменные с одним и несколькими аргументами в вызове функции для 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]
Но это не работает.
2 ответа
Это должно сделать то, что вам нужно:
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
в вызове, если требуется.