무엇이 균형기입니까?

10136 단어 이퀄라이저Python
※ 이미지가 우선이며, 기술이 정확하지 않습니다.

겨누다


다음 코드가 어떻게 작동하는지 이해할 수 있을 것 같아요.
for i in range(5):
    print(i)
# 0
# 1
# 2
# 3
# 4

이동전화란?


Python의 for 문장 대 균형기 동작입니다.
말해도 영감이 없을 것 같아서요.그래서 왜 이런 개념이 필요한지 설명한다.

while 문으로 재현해 주세요.


아래의 for문의 견본을 고려하시오.
l = ['Alpha', 'Beta', 'Charlie']

for name in l:
    print(name)
파이썬을 공부하시는 분들이라면 출력이 뭔지 아세요?
Alpha
Beta
Charlie
네, 배열에서 이름을 표시할 수 있습니다.이걸 while로 다시 쓰면 이런 느낌으로 바꿀 수 있어요.
l = ['Alpha', 'Beta', 'Charlie']
i = 0
while True:
    if i == len(l):
        break
    print(l[i])
    i += 1

같은 것도 해보세요.


출력이 같다.파이톤의 for문은 각양각색의 배열에 간단하게 이런 조작을 거는 기능입니까?아래의 예를 고려해 보아라.이번에는 set (집합) 형으로 배열을 대체하는 예입니다.set은 집합을 나타내는 대상입니다. 같은 숫자를 입력해도 저장됩니다.
s = {1, 2, 2, 3, 1, 4}
↓
{1, 2, 3, 4}
객체에 대해 항상 작업을 수행합니다.
s = {1, 2, 3, 4, 5}

i = 0
while True:
    if i == len(s):
        break
    print(s[i])
    i += 1
이 프로그램을 실행하면 오류가 발생하여 욕을 먹을 수 있다.
Traceback (most recent call last):
  File "a.py", line 7, in <module>
    print(s[i])
TypeError: 'set' object is not subscriptable
왜 그랬을까?Set과 Dict형 등의 객체가 배열처럼 한 열로 가로로 놓이지 않기 때문이다.산목록의 구조로 표시하다.

(사진은 위키백과)
또 세계에서도 나무로 표현된 데이터 구조가 있다.이번에는 이해하기 쉬우니 이것을 예로 삼아라.

(사진은 위키백과)
이렇게 표현하는 대상은'다섯 번째 가져와!'이렇게 지시해도 당장 떼어낼 수는 없다.이 그림에서 말한 머리 2부터 순서대로 전진해야 한다.따라서 백자 접근은 금지된다.대신 "hogehoge라고 적힌 사람을 찾아라!"이런 지시는 곧 대답할 겁니다.사전형은 이런 특성을 활용한 대상이다.
그렇다면 어떻게while문으로 같은 행동을 재현합니까?다음은 예를 하나 들자.
s = {1, 2, 3, 4, 5}

while True:
    if s == set():
        break
    print(s.pop())
상세한 알고리즘은 생략했지만 조작과list는 완전히 다르다는 것을 알 수 있다.단, 이 set형에 대해서도 for문을 사용할 수 있습니다.
s = {1, 2, 3, 4, 5}

for num in s:
    print(num)
왜 그랬을까?이것이 바로'파이톤의 for문 이동 균형기'의 본질이다.list와 set에 균형기를 설치했습니다.또한 for문은list와set의 이구체 대상을 전달합니다.따라서 아래 서술한 바와 같이 동작도 같다.
s = {1, 2, 3, 4, 5}

a = iter(s)
for num in a:
    print(num)

이동 전화 동작의 영상


그리고 이퀄라이저 객체의 경우next__()는 현재 이동전화 이후 위치값을 되돌려주는 함수를 반드시 실현해야 한다.
따라서 이것도 같은 출력이다
s = {1, 2, 3, 4, 5}

a = iter(s)

print(next(a)) # __next__を外から呼び出す
print(next(a))
print(next(a))
print(next(a))
print(next(a))
그림에서 보듯이 아래와 같다.


나는 이동전화의 편리성을 대충 이해했다고 생각한다.이동전화는 다음 값만 얻으면 되기 때문에 데이터를 모두 저장할 필요가 없다.

목적을 이해하다


다음 코드를 보십시오.이것은 겨냥해서 쓴 코드이다
for i in range(5):
    print(i)
# 0
# 1
# 2
# 3
# 4
이 코드도 다음과 같이 고려할 수 있다.
a = [0, 1, 2, 3, 4]

for i in a:
    print(i)
# 0
# 1
# 2
# 3
# 4
이게 5개가 아니라 10000이라면?100만이면?0에서 999999의 목록을 생성합니까?아니야.숫자 하나만 준비해서 늘리면 돼요.

이렇게 하면 실제적으로 0에서 999999의 목록을 만들 필요가 없기 때문에 메모리를 절약할 수 있다.또한 for문은 이 이동전화를 호출함으로써 다양한 대상을 효과적으로 사용할 수 있다.

기록 편집


206-06-19shiracamus의 지적에 따라 바깥쪽의next라는 원본 코드를 수정하였다
2020-06-21 https://github.com/zerokpr 선생님의 지적에 따라 Set의 데이터 구조 주위의 오류를 수정하였다

좋은 웹페이지 즐겨찾기