Когда я сталкиваюсь с ситуацией, я могу сделать это в javascript, я всегда думаю, что если есть foreach
функция, это было бы удобно. Под foreach я подразумеваю функцию, которая описана ниже:
def foreach(fn,iterable):
for x in iterable:
fn(x)
они просто делают это для каждого элемента и ничего не возвращают и не возвращают, я думаю, что это должна быть встроенная функция, которая должна выполняться быстрее, чем написание на чистом Python, но я не нашел ее в списке, или это просто назвали другое имя? или я просто скучаю по некоторым пунктам здесь?
Может быть, я ошибся, потому что вызов функции в Python стоит дорого, определенно не очень хорошая практика для примера. Вместо цикла out функция должна выполнять цикл в той части, в которой ее тело выглядит следующим образом, что уже упоминалось во многих предложениях кода Python:
def fn(*args):
for x in args:
dosomething
но я думал, что foreach по-прежнему можно использовать на основе двух фактов:
- В обычных случаях люди просто не заботятся о производительности
- Иногда API не принимает итеративный объект, и вы не можете переписать его источник.
источник
for
цикла?for
, для чего.list.each(func)
Чищеfor item in list: func(item)
, ИМО. Проблема в том, что Python проделал хорошую работу по замене функциональных фаворитов, таких какmap()
иfilter()
списки, которые просто расширяют его встроенныеfor
иif
(которые являются однородными и читаемыми), и конкретный.each()
может пойти против этого.sum(0 for _ in map(f, seq))
это читаемый обходной путь.Ответы:
Каждый случай «foreach», который я видел (PHP, C #, ...), делает в основном то же самое, что и выражение python «for».
Это более или менее эквивалентно:
Так что, да, в питоне есть «foreach». Это называется "для".
То, что вы описываете, является функцией «карта массива». Это можно сделать с помощью списочных представлений в python:
источник
Python не имеет
foreach
утверждения как такового . Он имеетfor
встроенные в язык циклы.Если вы действительно хотите, вы можете определить свою собственную
foreach
функцию:Как примечание стороны,
for element in iterable
синтаксис происходит от языка программирования ABC , одного из влияний Python.источник
map
таким способом на самом деле не сработает в Python 3, гдеmap
лениво. То есть теперь он возвращает итератор, а не уже вычисленный список. Побочные эффекты не будут иметь место, пока вы не выполните итерацию по полученному списку.for
цикл, и если повторяемая длина длинная (возможно, бесконечная) или возвращаемые значения функции большие, она разрывается с aMemoryError
.for
циклов и списков.Другие примеры:
Цикл Python Foreach:
Python For Loop:
источник
map
может использоваться для ситуации, упомянутой в вопросе.Например
Для функций, которые принимают несколько аргументов, можно указать больше аргументов для map:
Возвращает список в Python 2.x и итератор в Python 3
В случае, если ваша функция принимает несколько аргументов и аргументы уже представлены в виде кортежей (или любой итерируемой начиная с Python 2.6), вы можете использовать
itertools.starmap
. (который имеет синтаксис, очень похожий на тот, который вы искали). Возвращает итератор.Например
дает нам 8 и 9
источник
map
иforeach
имеют другое значение.map
возвращает список результатов (что подразумевает создание списка, или перечислимой структуры, или структуры, которая будет использована и поэтому неforeach
вызывается сразу), вызывает функцию для каждого элемента, игнорируя результат.Foreach
должен немедленно вернуть результат. Сказать, что создание итератора вместо foreach предпочтительнее, - полная чушь.map()
когда результат игнорируется, является антишаблоном. Вместо этого вы должны использовать цикл for.map
и игнорирование результатов приведет к нежелательным результатам в Python 3, посколькуmap
теперь лениво оценивается только при использовании полученного списка. Если результатmap
никогда не используется, вызовы никогда не применяются.Это делает foreach в Python 3
источник
Да, хотя он использует тот же синтаксис, что и для цикла.
источник
forEach
Если я вас правильно понял, вы имеете в виду, что если у вас есть функция 'func', вы хотите проверять каждый элемент в списке, если func (item) возвращает true; если у тебя все получится, то сделай что-нибудь.
Вы можете использовать «все».
Например: я хочу получить все простые числа в диапазоне 0-10 в списке:
источник
Вот пример конструкции foreach с одновременным доступом к индексам элементов в Python:
источник
Посмотрите на эту статью . Объект-итератор nditer от numpy пакета , представленный в NumPy 1.6, предоставляет множество гибких способов систематического посещения всех элементов одного или нескольких массивов.
Пример:
источник
Если вы просто ищете более краткий синтаксис, вы можете поместить цикл for в одну строку:
Просто разделите дополнительные операторы точкой с запятой.
Это может не соответствовать вашему местному руководству по стилю, но может иметь смысл сделать это так, когда вы играете в консоли.
источник
Я думаю, что это отвечает на ваш вопрос, потому что это похоже на цикл «для каждого».
Сценарий ниже действителен в Python (версия 3.8):
источник