파이썬 항목 07-- 유도, 발전기, 풀고

첫째, 유도
유도 실제로 신속 튜플 사전 및 컬렉션의리스트를 생성하는 짧은 루프이다. 예를 들면 :

lst1 = [범위 (X)에 대한 X (5)]
lst2 = 튜플 ([범위 (X)에 대한 X (5)])
lst3 = {X : 범위 X의 CHR (65 + X) (5)}
lst4 = {X 범위 X (5)}
인쇄 (lst1, lst2, lst3, lst4)
# [0, 1, 2, 3, 4] (0, 1, 2, 3, 4) {0 'A', 1 : 'B', 2 'C', 3 'D', 4 'E'} {0, 1, 2, 3, 4}

첫번째 부분은 시퀀스의 요소의 동작의 결과로서 기능 할 수 있고, 파생 된 표현이다. 연속주기는 연속 시퀀스를 구성하는 요소를 생성 요소.

도 1을 참조하면, 후방 부의 도출 짧은 루프, 루프는 중첩 될 수있다. 예를 들면 :

- lst1 = STR (X) + '범위의 Y에 대한 범위 (5)의 X (2)에 대한 + STR (Y)]
의 x의 + STR (Y) -'lst2 = STR (X) + 범위의 Y (X)]의 범위 (5)
인쇄 (lst1, lst2 9 월 = '\ n')
# [ '0-0', '0-1', '1-0', '1-1' '2-0', '2-1', '3-0', '3-1', '4-0', '4-1']
# [ '1-0', '2-0' '2-1', '3-0', '3-1', '3-2', '4-0', '4-1', '4-2', '4-3']

(2) 최종 표면의 유도는 또한 필터 요소 if 문을 추가 할 수있다. 예를 들면 :

lst1 = [X ** 2 범위 (10)에서 x의 경우 x> = 5]
lst2 = STR (X) + '-'범위의 Y에 대한 범위 (5)에 대한 + X STR (Y) (X) 만약 X + Y> 3
인쇄 (lst1, lst2 9 월 = '\ n')
#을 [25, 36, 49, 64, 81]
# [ '3-1', '3-2', '4-0 ','4-1 ','4-2 ','4-3 ']

둘째, 상기 발전기는
짧은 루프에 상응하고, 동일한 열로부터 유도 된 표면을 생성 만 최 괄호에만 한정되지 않고, 상기 발전기는 본질적 두 가지 수식을 도출된다 :
먼저 세대 마지막 시퀀스가 발생하지 않고, 발생 반복 객체는 물론, 발전기 반복자 객체 용이 튜플 사전 및 컬렉션의리스트로 변환 될 수 있으며,
두 번째 발생은 단지 컴파일시 발전기 객체를 생성 에만 호출 할 수있는 발전기 반복자 객체를 생성합니다. 기계에 대응 객체를 생성하는 발전기 반복자 제품에 대응하는 개체.

예 :
겐은 = (. 범위 X (위한 X 5)) #은 최 괄호에 의해 정의 될 수있다
(창) #이 오브젝트 생성기 반복자 <object 생성기 AT 0x00000000024CEDD0>에 의해 생성 된 인쇄 할
인쇄 (목록 (창)) # 콜 발전기 반복자 객체 반복자 쉽게 시퀀스로 변환 오브젝트 생성기 때 생성 : 0,1,2,3,4]를

방법은 파생 루프 중첩 열 사용 및 사용할 수있는 빌더에서 마지막으로, if 문을 추가 할 수 있습니다.
= 세대 (STR (X) + '-'X + Y> 13 인 경우, 거리 (X)에서의 Y에 대한 범위 (10 X 대 + STR (Y)))
프린트 (목록 (세대)) # [ '8-6 ','8-7 ','9-5 ','9-6 ','9-7 ','9-8 ']

즉이 괄호 밖의 사용되기 때문에, 시퀀스 발생기는, 생성 일 뿐이다보다도 그것을 호출 할 수 튜플 식 발전기. 함수는 "수율"키워드가있는 경우 또한, 함수 (: 형 함수 발생기라고도) 함수 발생기 타입이된다.

라고 많은 사람들이 튜플 타입 생성기는 "빌더를 튜플,"나는 쉽게 생산 튜플로 설계 발전기 오인 될 수 있기 때문에 매우 적절하지 않다 생각하고, 사실이 아니다, 그것은 결국 생성합니다 반복자 오브젝트 생성기는,이 생성기는 반복 객체 튜플로 변환 할 수있다 또한 다른 시퀀스로 변환 될 수있다.

정상 기능의 수율없이보다 수율가 발생 형 함수의 차이는 여전히 매우 크다.

파라미터는 다음 불리는 1 만 발생 형 함수 ()이 함수는 다르게 사용될 수없고, 실행된다.

데프 fun01 () :
인쇄 ( '++'); ( '++++') 인쇄

fun01 = F01 ()
F01 번호 일반 기능 실행은 다음을 보여
++
++++

데프 fun02 () :
인쇄 ( '++'); 6을 얻었다; ( '++++') 인쇄

fun02 = F02 ()
F02 번호 형 함수 발생기, 아무것도 표시되지 실행되지 않는
프린트 (F02)의 # F02가 객체 자체 <0x0000000001D9EDD0에서 발생 오브젝트 fun02>

fun02 = F03 ()
만 () 다음은 당신이 디스플레이를 호출 할 때 실행되지 않습니다 다음 (F03) #의 함수 발생기 유형 : ++

2 후속 수율 키워드의 값은, 예를 들면, 다음 정지, 복귀시 런타임 함수 발생기 유형 :

fun02 = F04 ()
: 잉크 (다음 (F04)) # 아래와
이것은 이전 인쇄 수율 ( '+') 문장 디스플레이의 경우 + + #
6 명 복귀 # 키워드 기능은 최종 수율이 값을 수득 백업 정지

3, 다시 다음 () 함수를 호출 발전기 유형, 함수는 첫 문장에서 실행되지 않지만, 이전의 정지 위치에서 실행 시작 후, 마지막 시간이 계속 실행입니다. 다음 정거장에 실행하고이 키워드를 얻을 수 있습니다. 문제는 더 "다음 수익률 키워드를"존재하지 않는 경우는 그 뜻입니까? 예외를 throw하지 않고, 모든 것이 정지합니다.

fun02 = F05 ()
인쇄 (다음 (F05)) # 아래에 표시 :
++
. 6
인쇄 (다음 (F05)) # 표시는 다음과
수율 ++++ 실행하려면 # 문장, a로부터 시작 후이 시간을 실행
이 끝나기 전에 대하여 StopIteration # 기능을하지만, 새로운 수율 키워드를 충족하지 않은 예외가 발생합니다

데프 fun03 () :
인쇄 ( '++'); 6 수득
인쇄 ( "++++"); 7 수득
인쇄 ( '++++++'); 8 산출
인쇄 ( '+ + + + + + + +')

fun03 = F06 ()
전단 (NEXT (F06)) # 아래와 :
++
6.
인쇄 (다음 (F06)) # 아래와 같이 :
++++
7.
인쇄 (NEXT (F06))을 아래와 같이 # :
++++ ++
8
인쇄 (다음 (F06)) # 표시는 다음과 같습니다 :
+ + + + + + + +
하지만 대하여 StopIteration # 기능이 끝나기 전에 새로운 수율 키워드를 충족하지 않은 예외가 발생합니다

위의 알 (4)는, 예외의 사용과 발전기 유형 기능을 사용하면 무제한으로 호출 할 수 있습니다 그래서이 문제는 또한 매우 간단 무한 루프에 키워드를 산출하는 것입니다 해결하기 위해, 슬로우됩니다.
fun04 DEF. (X = 5) :
참 동안 : 수율 X, X + = 1.

F07 = fun04 (8)
잉크 (다음 (F07), 다음 (F07), 다음 (F07), 다음 (F07), 다음 (F07), 다음 (F07)) # 8 9 10 11 12 13

즉, 치약의 튜브와 같은 발전기 형 기능, 쥐어 짜기 조금 스퀴즈를 통해 예외를 발생 짜내하지 않습니다.

셋째, 압축 풀기
압축 풀기 개 변수에 간단한 방법을 사용하는 것입니다. 왼쪽 피연산자의 복수의 권리 목록 같은 튜플 시퀀스 통상적에서 분리 ","콤마 변수를 지정한다. 예를 들어
X1, Y1, Z1 = [16,17,18]
X2, Y2, Z2 = (26,27,28)

X3, Y3, Z3 = 딕셔너리 ({1 : 36,2 : 37,3 : 38}). 항목 ()
X4, Y4, Z4 = {46,47,48}

인쇄 (X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, X4, Y4, Z4) # 16 17 18 26 27 28 (1,36) (2,37) (3,38) (48) (46) 47

솔루션 패키지의 루프 문을 사용할 수있다. 예를 들어
위한 I, V, N 인 [(1,2,3), (11, 12, 13), (21,22,23)] :
전단 (I, V, N-, 종료 = '' ') # 123; 111,213; 212,223;

출시 팔 개 원래 기사 · 원의 칭찬 0 · 조회수 85

추천

출처blog.csdn.net/Jeff888999/article/details/103933151