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
하지만 포어치는 여전히 두 가지 사실에 근거해서 환영할 만하다고 생각했어요
- 보통 사람들은 퍼포먼스에 신경 쓰지 않는다
- 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
'source' 카테고리의 다른 글
"무시 삽입" vs "삽입...중복된 키 업데이트 시" (0) | 2022.10.19 |
---|---|
Fetch를 사용하여 x-ww-form-urlencoded 요청을 POST하려면 어떻게 해야 합니까? (0) | 2022.10.19 |
Node.js란? (0) | 2022.10.19 |
JavaScript에서 2차원 배열을 작성하려면 어떻게 해야 합니까? (0) | 2022.10.19 |
MySQL 데이터 원본이 Visual Studio에 나타나지 않음 (0) | 2022.10.19 |