게으른 평가에 대한 간략한 시도
7150 단어 machinelearningdatasciencepython
Iterables 및 생성기
"제너레이터"생성에 대해 논의할 때 도입되는 핵심 개념은
for
및 in
를 사용하여 제너레이터(예: 목록)를 반복하지만 필요에 따라 느리게 반복하는 것입니다. 이것은 공식적으로 lazy evaluation 또는 값이 필요할 때까지 표현식 평가를 지연시키는 '필요에 따른 호출'이라고 합니다. 우리는 이것을 최적화의 한 형태로 생각할 수 있습니다. 필요하지 않을 때 반복되는 함수 호출을 피하는 것입니다.다음은 Xiaoxu Gao에서 빌린 그래픽입니다. 그녀의 게시물here을 확인하세요.
일부
generators
(맞춤형 함수/클래스)를 생성하지만 range()
와 중복된다는 점을 명심하십시오. 둘 다 지연 평가를 설명합니다.# Example 1: create natural_numbers() function that incrementally counts numbers
def natural_numbers():
"""returns 1, 2, 3, ..."""
n = 1
while True:
yield n
n += 1
# check it's type
type(natural_numbers()) # generator
# call it, you get: <generator object natural_numbers at 0x7fb4d787b2e0>
natural_numbers()
# the point of lazy evaluation is that it won't do anything
# until you iterate over it (but avoid infinite loop with logic breaks)
for i in natural_numbers():
print(i)
if i == 37:
break
print("exit loop")
# result 1...37 exit loop
다음은 지연 평가를 사용하는 내장 Python 함수인
range
를 사용하는 또 다른 예입니다. this generator
를 호출하더라도 반복할 때까지 아무 작업도 수행하지 않습니다.evens_below_30 = (i for i in range(30) if i % 2 == 0)
# check its type - generator
type(evens_below_30)
# call it, you get: <generator object <genexpr> at 0x7fb4d70ef580>
# calling it does nothing
evens_below_30
# now iterate over it with for and in - now it does something
# prints: 0, 2, 4, 6 ... 28
for i in evens_below_30:
print(i)
마지막으로, 이 섹션은
generator
또는 list
를 반복하고 values
및 indices
를 모두 얻으려는 경우 열거하는 또 다른 중요한 키워드를 제공합니다.# create list of names
names = ['Alice', 'Lebron', 'Kobe', 'Bob', 'Charles', 'Shaq', 'Kenny']
# Pythonic way
for i, name in enumerate(names):
print(f"index: {i}, name: {name}")
# NOT pythonic
for i in range(len(names)):
print(f"index: {i}, name: {names[i]}")
# Also NOT pythonic
i = 0
for name in names:
print(f"index {i} is {names[i]}")
i += 1
제 생각에는 파이썬 방식이 여기에서 훨씬 더 읽기 쉽습니다.
Reference
이 문제에 관하여(게으른 평가에 대한 간략한 시도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/paulapivat/a-brief-foray-into-lazy-evaluation-30ep텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)