python3 제18장 - 교체기와 생성기
문자열, 목록 또는 모듈 객체를 사용하여 교체기를 작성할 수 있습니다.
인스턴스 1:
basket = ['apple', 'orange', 'pear', 'banana']
it = iter(basket) #
#
print(next(it))
#
print(next(it))
위 코드, 출력:
apple
orange
인스턴스 2:
basket = 'abc'
it = iter(basket) #
print(next(it)) #
print(next(it)) #
위 코드, 출력:
a
b
일반적으로 for 명령문과 함께 사용됩니다. 예:
basket = 'abc'
it = iter(basket) #
for n in it:
print(n)
위 코드, 출력:
a
b
c
Python에서list,truple,str,dict 이것들은 모두 교체될 수 있지만, 그들은 교체기가 아니다.왜?
교체기와 비교하면 매우 큰 차이가 있기 때문에list/truple/map/dict의 데이터 크기는 확정적이다. 즉, 얼마나 많은지 알 수 있다.그러나 교체기는 아니다. 교체기는 몇 번을 실행해야 할지 모르기 때문에 몇 개의 요소가 있는지 모르고next()를 호출할 때마다 한 걸음 아래로 내려가는 타성으로 이해할 수 있다.
교체가 가능한지 아닌지를 판단하기 위해 Iterable로
from collections import Iterable
print('{} Iterable?', isinstance({}, Iterable))
print('() Iterable?', isinstance((), Iterable))
print('100 Iterable?', isinstance(100, Iterable))
위 코드, 출력:
{} Iterable? True
() Iterable? True
100 Iterable? False
교체기인지 아닌지를 판단하는 Iterator
from collections import Iterator
print('{} Iterable?', isinstance({}, Iterator))
print('() Iterable?', isinstance((), Iterator))
print('(x for x in range(10)) Iterable?', isinstance((x for x in range(10)), Iterator))
위 코드, 출력:
{} Iterable? False
() Iterable? False
(x for x in range(10)) Iterable? True
순환할 수 있는 모든 것은 Iterable이다
next () 가 가능한 모든 것은 Iterator
집합 데이터 형식인list,truple,dict,str는 모두 Itrable입니다. Iterator가 아니지만 iter () 함수를 통해 Iterator 대상을 얻을 수 있습니다
Python의 for 순환은next를 통해 이루어진다
for x in [1, 2, 3, 4, 5]:
pass
... 과 같다
# iterator
it = iter([1, 2, 3, 4, 5])
while True:
try:
#
x = next(it)
except StopIteration:
# StopIteration
break
2. 생성기
파이톤에서 yield를 사용한 함수를 생성기(generator)라고 부른다.
def fibonacci(n): # -
a, b, counter = 0, 1, 0
while True:
if counter > n:
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f ,
어떤 상황에서 ield를 사용해야 합니까?하나의 함수 f, f는list를 되돌려줍니다. 이list는 동적 계산으로 계산됩니다. (수학적 계산이든 논리적 읽기 포맷이든) 그리고 이list는 매우 큽니다. (고정이 크든 입력 매개 변수가 커지든) 이럴 때우리는 이 함수를 호출하고 교체기를 사용하여 순환할 때마다 각각list 요소를 하나씩 얻기를 원한다. 완전한list를 직접 얻지 않고 메모리를 절약할 때 yield가 매우 유용하다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.