Вызов функций в a для l oop в одну строку, если выполняется условие - PullRequest
0 голосов
/ 03 марта 2020

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

f(i) if condition else continue for i in range(rng)

Я могу сделать это в виде списка:

[f(i) if condition else None for i in range(rng)]

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

Итак, есть ли способ вызвать функцию, если условие выполнено и ничего не делается если нет, в a для l oop и в одну строку, не делая ничего другого, например, создание ненужного списка?

Ответы [ 3 ]

1 голос
/ 03 марта 2020
for i in range(rng): condition and f(i)

Но лучше сделать это обычным способом:

for i in range(rng):
    if condition:
        f(i)
1 голос
/ 03 марта 2020

Вы используете обычный цикл for; в Python нет «однострочных» операторов l oop, игнорируя тривиальные обескураживающие примеры размещения однострочного тела в той же строке, что и ключевое слово for (for x in y: do_something(x)).

for i in range(rng):
    if not condition:
        continue
    f(i)

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

for i in filter(lambda x: condition, range(rng)):
    f(i)
0 голосов
/ 03 марта 2020

Думаю, эта статья очень вам поможет: https://medium.com/better-programming/lambda-map-and-filter-in-python-4935f248593 если у вас есть итеративный объект и вы хотите запускать функцию только при условии, что условие истинно, вы можете запустить его с фильтром:

filter(function, iterable)

и внутри функции для проверки вашего состояния

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...