Функция Аргумент Упаковка и распаковка Python - PullRequest
0 голосов
/ 12 ноября 2018

В настоящее время у меня есть такая функция:

def my_func(*args):
    #prints amount of arguments
    print(len(args))
    #prints each argument
    for arg in args:
        print(arg)

Я хочу передать несколько аргументов этой функции, но следующее не работает для меня.Он выдает синтаксическую ошибку на звездочке * после else.

my_func(
    *(1, 2, 3, 4)
    if someBool is True
    else *(1, 2)
)

Обнаруженный мной обходной путь сначала ставит 1 и 2, а затем ставит 3 и 4 при проверке someBool.

my_func(
    1, 2,
    3 if someBool is True else None,
    4 if someBool is True else None
)

Я согласен с вышесказанным, так как моя функция проверяет None, но если есть альтернатива, я бы с радостью их поблагодарил.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Вам нужен дополнительный набор скобок. Кроме того, вам не нужно указывать is True, чтобы проверить, является ли логическое значение «правдивым» в python, что делает его: my_func(*((1, 2, 3, 4) if someBool else (1, 2))).

0 голосов
/ 12 ноября 2018

Переместите * за пределы ... if ... else ...:

my_func(
    *((1, 2, 3, 4)
      if someBool is True
      else (1, 2))
)
...