source

Python 3에 'foreach' 기능이 있나요?

lovecheck 2022. 10. 19. 21:12
반응형

Python 3에 'foreach' 기능이 있나요?

에 맞닥뜨리면 자바스크립트로 할 수 것 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★foreach기능이 편리할 것입니다.''란 'foreach'라는

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

그들은 모든 요소에서 그것을 하고, 무언가를 양보하거나 반환하지 않았다. 나는 그것이 내장된 함수이고 순수한 Python으로 그것을 쓰는 것보다 더 빠를 것이라고 생각한다. 하지만 나는 그것을 리스트에서 찾지 못했다. 아니면 그것은 단지 다른 이름을 불렀을 뿐인가? 아니면 여기서 몇 가지 포인트를 놓쳤다.

Python의 함수를 호출하는 것은 비용이 많이 들기 때문에 제가 잘못 알고 있는 것 같습니다.이 예에서는 결코 좋은 방법이 아닙니다.함수는 아웃루프가 아니라 그 본체가 아래와 같이 되어 있는 측면에서 루프를 실행해야 합니다.이것은 많은 파이썬의 코드 제안에서 이미 언급되어 있습니다.

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

하지만 포어치는 여전히 두 가지 사실에 근거해서 환영할 만하다고 생각했어요

  1. 보통 사람들은 퍼포먼스에 신경 쓰지 않는다
  2. API가 반복 가능한 오브젝트를 받아들이지 않아 소스를 다시 쓸 수 없는 경우가 있습니다.

내가 본 모든 "전해"의 발생(PHP, C#, ...)은 기본적으로 비단뱀의 "for" 진술과 같은 역할을 한다.

다음은 어느 정도 동등합니다.

// PHP:
foreach ($array as $val) {
    print($val);
}

// C#
foreach (String val in array) {
    console.writeline(val);
}

// Python
for val in array:
    print(val)

그래서, 네, 비단뱀에는 "전해"가 있습니다.그건 "for"라고 불려요.

설명하시는 것은 "어레이 맵" 함수입니다.이것은 python의 리스트 컴파일레이션으로 실행할 수 있습니다.

names = ['tom', 'john', 'simon']

namesCapitalized = [capitalize(n) for n in names]

Python이 .foreach스테이트먼트자체입니다.정말 그랬어요.for언어에 내장된 루프입니다.

for element in iterable:
    operate(element)

만의 정의를 수 .foreach★★★★

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

「 」는, 「 」의 「 」에 해 주세요.for element in iterable구문은 Python의 영향 중 하나인 ABC 프로그래밍 언어에서 유래했습니다.

기타 예:

Python Forech 루프:

array = ['a', 'b']
for value in array:
    print(value)
    # a
    # b

Python For Loop:

array = ['a', 'b']
for index in range(len(array)):
    print("index: %s | value: %s" % (index, array[index]))
    # index: 0 | value: a
    # index: 1 | value: b

map 는 질문에 언급된 상황에 사용할 수 있습니다.

예.

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

여러 인수를 사용하는 함수의 경우 매핑에 더 많은 인수를 지정할 수 있습니다.

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

python 2.x의 목록과 python 3의 반복기를 반환합니다.

함수가 여러 인수를 사용하고 인수가 이미 tuples 형식(또는 python 2.6 이후 반복 가능)인 경우 를 사용할 수 있습니다.반복기를 반환합니다.

예.

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

우리에게 8과 9를 준다.

정답은 "피톤 컬렉션에는 다음 항목이 없습니다.foreach에서는 외부 for _element_ in _collection_OP가 원하는 구문이 아닙니다.

Python은 일반적으로 함수 프로그래밍에 매우 약합니다.조금 완화해야 할 라이브러리가 몇 개 있습니다.가 이 중 .infixpy

pip install infixpy https://pypi.org/project/infixpy/

from infixpy import Seq
(Seq([1,2,3]).foreach(lambda x: print(x)))
1
2
3

참고 항목: Python 3 목록 왼쪽에서 오른쪽으로 작업 적용

네, 단, for 루프와 같은 구문을 사용합니다.

for x in ['a', 'b']: print(x)

다음은 Python에서 요소 인덱스에 동시에 액세스할 수 있는 "foreach" 구성의 예입니다.

for idx, val in enumerate([3, 4, 5]):
    print (idx, val)

이것은 python 3에서 포어치를 실행한다.

test = [0,1,2,3,4,5,6,7,8,"test"]

for fetch in test:
    print(fetch)

기사를 보세요.NumPy 1.6에서 도입된 numpy 패키지의 반복기 객체 nditer는 하나 이상의 어레이의 모든 요소를 체계적으로 참조할 수 있는 많은 유연한 방법을 제공합니다.

예:

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]]

내가 제대로 이해했다면, 함수 'func'가 있으면 func(아이템)가 true를 반환하면 목록 내의 각 항목을 체크하고, 모든 것에 대해 true를 얻으면 어떤 조치를 취하라는 의미입니다.

'all'을 사용할 수 있습니다.

예를 들어 다음과 같습니다.목록에서 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))]

이게 오래된 줄거리인 건 알지만 코드와이어 연습을 할 때도 비슷한 질문이 있었어요.

루프를 내포하는 솔루션을 생각해 냈습니다.이 솔루션은 대부분의 시나리오에서 동작하는 "각 (x) doThing" 스테이트먼트를 복제하는 질문에 적용할 수 있다고 생각합니다.

for elements in array:
    while elements in array:
        
        array.func()

보다 간결한 구문을 찾고 있는 경우 for 루프를 한 줄에 넣을 수 있습니다.

array = ['a', 'b']
for value in array: print(value)

추가 문장은 세미콜론으로 구분합니다.

array = ['a', 'b']
for value in array: print(value); print('hello')

이것은 현지 스타일 가이드에는 적합하지 않을 수 있지만 콘솔에서 플레이할 때는 이렇게 하는 것이 좋을 수 있습니다.

필요한 경우 다음 작업을 수행할 수 있습니다.

[fn(x) for x in iterable]

그러나 목록 이해의 요점은 목록을 만드는 것이다 - 부작용에만 사용하는 것은 서투른 스타일이다.for 루프는 입력도 적습니다.

for x in iterable: fn(x)

즉, 이를 위한 기능적 프로그래밍 방법은 다음과 같습니다.

def do_and_return_fn(og_fn: Callable[[T], None]):
    def do_and_return(item: T) -> T:
        og_fn(item)
        return item
    return do_and_return

# where og_fn is the fn referred to by the question. 
# i.e. a function that does something on each element, but returns nothing.
iterable = map(do_and_return_fn(og_fn), iterable)

"for" 루프가 "foreach" 함수와 동일하다는 답변은 모두 python의 반복기에서 동작하는 다른 유사한 함수(예: map, filter 및 반복 도구의 다른 함수)가 게으르게 평가된다는 점을 간과하고 있습니다.

데이터베이스에서 반복 가능한 사전이 있고 반복자가 반복될 때 각 사전 요소에서 항목을 제거하려고 합니다.원본 사전이 아닌 팝이 팝된 아이템을 반환하기 때문에 지도를 사용할 수 없습니다.

위에서 설명한 접근방식으로 합격하면 이 목표를 달성할 수 있습니다.lambda x: x.pop()나의 og_fn으로서

Python이 제가 만든 것과 같은 인터페이스를 가진 내장 레이지 함수를 가지고 있다면 좋을 것 같습니다.

foreach(do_fn: Callable[[T], None], iterable: Iterable)

앞에서 설명한 기능을 사용하여 구현하면 다음과 같습니다.

def foreach(do_fn: Callable[[T], None], iterable: Iterable[T]) -> Iterable[T]:
    return map(do_and_return_fn(do_fn), iterable)

# being called with my db code. 
# Lazily removes the INSERTED_ON_SEC_FIELD on every element:
doc_iter = foreach(lambda x: x.pop(INSERTED_ON_SEC_FIELD, None), doc_iter)

언급URL : https://stackoverflow.com/questions/18294534/is-there-a-foreach-function-in-python-3

반응형