Выражение Python, которое возвращает значение, если условие выполнено, но в противном случае продолжает цикл for

Это будет звучать как глупая и ужасная идея, и, вероятно, потому, что так оно и есть. Есть ли в Python способ (предпочтительно однострочный) для создания выражения, которое преобразуется в значение, если выполняется условие, но если условие не выполняется, вместо этого выполняется оператор (например, continue или вызов метода)?

Пример использования ниже (хотя этот код на самом деле не работает):

def print_name_if_even(n):
    print(f"{ name if n % 2 == 0 else print("Uneven!") }")

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


person Max Phillips    schedule 16.06.2020    source источник
comment
Задача, в которой вы участвуете, называется гольфом кода, обязательно ознакомьтесь со страницей с советами по игре в гольф на питоне: codegolf.stackexchange.com/questions/54/   -  person sdcbr    schedule 16.06.2020
comment
Заключите Uneven в одинарные кавычки «Uneven» и удалите вложенную печать print(f"{ name if n % 2 == 0 else 'Uneven!' }")   -  person lazos    schedule 16.06.2020
comment
@lazos Извините, я привел плохой пример с использованием метода печати. Мой вопрос больше относится к другому случаю, когда я хотел запустить метод continue, если условие было ложным.   -  person Max Phillips    schedule 16.06.2020
comment
continue не является методом.   -  person juanpa.arrivillaga    schedule 16.06.2020
comment
вы ничего не повторяете - как здесь можно было бы использовать continue?   -  person acushner    schedule 16.06.2020


Ответы (1)


Вы имеете в виду что-то вроде этого?

def f():
    # <your statement>
    return 'yourstatement'

print ([f(), 'Even!'][False])

Замените False любым условием, которое оценивается как True (= 1) или False (= 0). (Это весело). Например:

def f():
    # <your statement>
    return 'yourstatement'
n=2
print ([f(), 'Even!'][n%2 == 0])
person Ronald    schedule 16.06.2020