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

Другие вопросы по тегам