>  기사  >  백엔드 개발  >  Python 기본 학습 요약(4)

Python 기본 학습 요약(4)

PHP中文网
PHP中文网원래의
2017-07-09 18:13:491265검색

6. 고급 기능

6.1 반복

 목록이나 튜플이 주어지면 for 루프를 통해 목록이나 튜플을 순회할 수 있습니다. 이러한 순회를 반복이라고 합니다. Python에서는 for...in을 사용하여 반복이 수행됩니다.

dict는 목록의 순서대로 저장되지 않기 때문에 반복된 결과의 순서가 다를 가능성이 높습니다. 기본적으로 dict는 키를 반복합니다. 값을 반복하려면 d.values()에서 for value를 사용할 수 있습니다. 키와 값을 동시에 반복하려면 d.items()에서 for k, v를 사용할 수 있습니다.

문자열은 반복 가능한 객체이므로 for 루프에서도 사용할 수 있습니다.

>>> 'ABC'의 ch:

... 인쇄(ch)

...

C

  객체가 반복 가능한 객체인지 어떻게 확인하나요? 방법은 컬렉션 모듈의 Iterable 유형으로 판단하는 것입니다:

>>> 컬렉션 가져오기 Iterable

>>> isinstance('abc', Iterable) # str이 반복 가능한지 여부

맞아요

>>> isinstance([1,2,3], Iterable) # 목록이 반복 가능한지 여부

맞아요

>>> isinstance(123, Iterable) # 정수가 반복 가능한지 여부

거짓

목록에 Java와 유사한 첨자 루프를 구현하고 싶다면 어떻게 해야 하나요? Python의 내장 열거 함수는 목록을 인덱스-요소 쌍으로 변환할 수 있으므로 인덱스와 요소 자체가 모두 for 루프에서 반복될 수 있습니다.

>>> i의 경우 enumerate(['A', 'B', 'C'])의 값:

... print(i, 값)

...

0A

1B

2C

6.2 목록 이해

 List Comprehension은 목록을 만드는 데 사용할 수 있는 Python에 내장된 매우 간단하지만 강력한 생성 기능입니다.

  목록 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]을 생성하려면 list(range(1, 11))를 사용하면 됩니다.

목록 생성 표현식 작성 시 생성할 요소를 x * 넣어주세요. for 루프 뒤에 if 판단을 추가하여 짝수의 제곱만 필터링할 수도 있습니다.

>>> [x * x for x in range(1, 11) if x % 2 == 0]

[4, 16, 36, 64, 100]

2단계 루프를 사용하여 전체 배열을 생성할 수도 있습니다.

>>> ['XYZ'의 n에 대한 'ABC'의 m에 대한 m + n]

['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

 목록 생성은 두 가지 변수를 사용하여 목록을 생성할 수도 있습니다.

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }

>>> [k + '=' + v(k, v in d.items())]

['y=B', 'x=A', 'z=C']

마지막으로 목록의 모든 문자열을 소문자로 변경합니다.

>>> L = ['안녕하세요', '세계', 'IBM', '애플']

>>> [L의 s에 대한 s.lower()]

['안녕하세요', '세계', 'ibm', 'apple']

6.3 생성기 표현식

 특정 알고리즘에 따라 목록 요소를 계산할 수 있으면 루프 중에 후속 요소를 계속 계산할 수 있습니다. Python에서는 이러한 루프 동안 계산 메커니즘을 생성기라고 합니다.

 생성기를 만드는 방법에는 여러 가지가 있습니다. 첫 번째 방법은 매우 간단합니다. 목록 생성 표현식에서 []를 ()로 변경하면 생성기를 생성할 수 있습니다.

 L과 g를 만드는 차이점은 가장 바깥쪽의 []와 ()뿐입니다. L은 리스트이고, g는 생성기입니다. 하나씩 출력하고 싶다면 next() 함수를 통해 제너레이터의 다음 반환값을 얻을 수 있습니다. 앞서 말했듯이 생성기는 알고리즘을 저장합니다. next(g)가 호출될 때마다 마지막 요소가 계산될 때까지 g의 다음 요소 값이 계산됩니다. 더 이상 요소가 없으면 StopIteration 오류가 발생합니다.

>>> L = [범위(10)의 x에 대한 x * x]

>>>

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> g = (x * x 범위(10))

>>>

<0x1022ef630의 생성기 개체

>>>다음(g)

0

>>>다음(g)

1

>>>다음(g)

4

>>>다음(g)

9

>>>다음(g)

16

>>>다음(g)

25

>>>다음(g)

36

>>>다음(g)

49

>>>다음(g)

64

>>>다음(g)

81

>>>다음(g)

추적(가장 최근 통화 마지막):

파일 "", 첫 번째 줄,

반복 중지

올바른 방법은 for 루프를 사용하는 것입니다. 왜냐하면 제너레이터도 반복 가능한 객체이기 때문입니다:

>>> g = (x * x 범위(10))

>>> n(g):

... 인쇄(n)

...

0

1

4

9

16

25

36

49

64

81

생성기를 정의하는 또 다른 방법입니다. 함수 정의에 Yield 키워드가 포함되어 있으면 함수는 더 이상 일반 함수가 아니라 생성기입니다.

def fib(최대):

n, a, b = 0, 0, 1

n < 최대:

ㅋㅋㅋ >                양보 b

        a, b = b, a + b

          n = n + 1

'완료'로 돌아가기

6.4 튜플 압축 풀기

 튜플('Tokyo', 2003, 32450, 0.66, 8014)의 요소를 변수 city, year, pop, chg 및 Area에 각각 할당하고 단 한 줄의 선언으로 모든 할당을 작성합니다. 마찬가지로 다음 줄에서 % 연산자는 여권 튜플의 요소를 인쇄 함수의 형식 문자열 간격에 매핑합니다. 둘 다 튜플 압축 풀기의 응용 프로그램입니다.

 튜플 풀기의 가장 잘 알려진 형태는 병렬 할당입니다. 이는 반복 가능한 객체의 요소를 해당 변수로 구성된 튜플에 할당하는 것을 의미합니다.

병렬 과제:

>>> lax_coordinates = (33.9425, -118.408056)

>>> 위도, 경도 = lax_coordinates # 튜플 압축 풀기

>>> 위도

33.9425

>>> 경도

-118.408056

 * 연산자를 사용하여 반복 가능한 객체를 함수 매개변수로 분할할 수 있습니다:

>>> divmod(20, 8) (2, 4)

>>>t = (20, 8)

>>> divmod(*t)

(2, 4)

>>> 몫, 나머지 = divmod(*t)

>>> 몫, 나머지

(2, 4)

 여기서 튜플 압축 풀기의 사용법은 함수가 튜플 형태로 여러 값을 반환할 수 있도록 허용한 다음, 함수를 호출하는 코드가 이러한 반환 값을 쉽게 받아들일 수 있도록 하는 것입니다. 예를 들어, os.path.split() 함수는 경로와 마지막 파일 이름(path, last_part)으로 구성된 튜플을 반환합니다.

>>> OS 가져오기

>>> _, 파일 이름 = os.path.split('/home/luciano/.ssh/idrsa.pub')

>>> 파일명

'idrsa.pub'

 Python에서는 불확실한 개수의 매개변수를 얻기 위해 *args를 사용하는 함수를 작성하는 고전적인 방법입니다.

 Python 3에서는 이 개념이 병렬 할당으로 확장되었습니다.

 병렬 할당에서 * 접두사는 변수 이름 앞에만 사용할 수 있지만 이 변수는 할당 표현식의 어느 곳에나 나타날 수 있습니다.

>>> a, b, *rest = 범위(5)

>>> 아, 비, 쉬세요

(0, 1, [2, 3, 4])

>>> a, b, *rest = 범위(3)

>>>아,비,쉬다

(0, 1, [2])

>>> a, b, *rest = 범위(2)

>>>아,비,쉬다

(0, 1, [])

>>> a, *body, c, d = 범위(5)

>>>a, 바디, c, d

(0, [1, 2], 3, 4)

>>> *머리, b, c, d = 범위(5)

>>> 머리, b, c, d

([0, 1], 2, 3, 4)

위 내용은 Python 기본 학습 요약(4)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.