Есть ли функция «foreach» в Python 3?

Когда я встречаю ситуацию, я могу сделать это в javascript, я всегда думаю, что если есть функция foreach это будет удобство. В foreach я имею в виду функцию, которая описана ниже:

 def foreach(fn,iterable): for x in iterable: fn(x) 

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

  • Python странное поведение в цикле или списках
  • Остановка итерации без использования `break` в Python 3
  • Использование Python для выполнения команды для каждого файла в папке
  • Идиома вложенного цикла Python
  • В Python лучше использовать списки или для каждого цикла?
  • Возможно, я ошибаюсь, потому что вызов функции на Python стоит дорого, определенно не очень хорошая практика для примера. Вместо того, чтобы выходить из цикла, функция должна делать петлю со стороны, ее тело выглядит так, как показано ниже, которое уже упоминалось во многих предложениях кода python:

     def fn(*args): for x in args: dosomething 

    но я думал, что foreach по-прежнему приветствуется в основе двух фактов:

    1. В обычных случаях люди просто не заботятся о производительности
    2. Когда-то API не принимал итеративный объект, и вы не можете переписать его источник.

  • Python, как удалить пробелы из текстовых узлов XML
  • Скрытие ярлыков осей
  • Как вы загружаете файл с запросом POST на django-tastypie?
  • Как вы проверяете на python, содержит ли строка только числа?
  • печать трассировки стека python без исключения
  • python, pd.read_csv рискованный импорт
  • 6 Solutions collect form web for “Есть ли функция «foreach» в Python 3?”

    Каждое появление «foreach», которое я видел (PHP, C #, …), в основном то же, что и оператор pythons for for.

    Они более или менее эквивалентны:

     // PHP: foreach ($array as $val) { print($val); } // C# foreach (String val in array) { console.writeline(val); } // Python for val in array: print(val) 

    Итак, да, в python есть «foreach». Это называется «за».

    То, что вы описываете, является функцией «map map». Это можно сделать с помощью списков в python:

     names = ['tom', 'john', 'simon'] namesCapitalized = [capitalize(n) for n in names] 

    У Python нет инструкции foreach как таковой . Он имеет петли, встроенные в язык.

     for element in iterable: operate(element) 

    Если вы действительно этого хотели, вы могли бы определить свою собственную функцию foreach :

     def foreach(function, iterable): for element in iterable: function(element) 

    В качестве дополнительной заметки for element in iterable синтаксисе исходит из языка программирования ABC , одного из влияний Python.

    map в большинстве случаев предпочтительна для ситуации, упомянутой в вопросе.

    Например

     map(len, ['abcd','abc', 'a']) # 4 3 1 

    Для функций, которые принимают несколько аргументов, может быть дано больше аргументов для отображения:

     map(pow, [2, 3], [4,2]) # 16 9 

    Он возвращает список в python 2.x и итератор в python 3

    В случае, если ваша функция принимает несколько аргументов, и аргументы уже находятся в форме кортежей (или любой итерабельной с python 2.6), вы можете использовать itertools.starmap . (который имеет очень похожий синтаксис того, что вы искали). Он возвращает итератор.

    Например

     for num in starmap(pow, [(2,3), (3,2)]): print(num) 

    дает нам 8 и 9

    Посмотрите на эту статью . Объект итератора nditer из пакета numpy , представленный в NumPy 1.6, предоставляет множество гибких способов систематически использовать все элементы одного или нескольких массивов.

    Пример:

     import random import numpy as np ptrs = np.int32([[0, 0], [400, 0], [0, 400], [400, 400]]) for ptr in np.nditer(ptrs, op_flags=['readwrite']): # apply random shift on 1 for each element of the matrix ptr += random.choice([-1, 1]) print(ptrs) d:\>python nditer.py [[ -1 1] [399 -1] [ 1 399] [399 401]] 

    другой пример

     // Python Foreach Loop for val in array: print(val) // Python For Loop for index in range(len(array)): print(array[index]) index+= 1 

    Если я правильно понял, вы имеете в виду, что если у вас есть функция func, вы хотите проверить каждый элемент в списке, если func (item) возвращает true; если вы вернетесь ко всем, тогда сделайте что-нибудь.

    Вы можете использовать «все».

    Например: я хочу получить все простые числа в диапазоне 0-10 в списке:

     from math import sqrt primes = [x for x in range(10) if x > 2 and all(x % i !=0 for i in range(2, int(sqrt(x)) + 1))] 
    Python - лучший язык программирования в мире.