목차
1. 컨테이너
1. 컨테이너란?
2. 반복 가능한 객체
1. 반복 가능한 객체란 무엇인가요?
3. Iterator
4. 시퀀스
五、列表推导式
六、生成器
1.生成器的第一种创建方法:生成器表达式
2.生成器的第二种创建方法:yield
七、小结
백엔드 개발 파이썬 튜토리얼 컨테이너, 반복 가능한 객체, 반복자 및 생성기에 대한 Python 상세 분석

컨테이너, 반복 가능한 객체, 반복자 및 생성기에 대한 Python 상세 분석

Apr 08, 2022 pm 07:06 PM
python

이 글은 컨테이너, 반복 가능한 객체, 반복자 및 생성기와 관련된 문제를 주로 소개하는 python에 대한 관련 지식을 함께 살펴보겠습니다.

컨테이너, 반복 가능한 객체, 반복자 및 생성기에 대한 Python 상세 분석

추천 학습: python 비디오 튜토리얼

Python을 처음 배우기 시작했을 때 컨테이너, 반복 가능한 객체, 반복자, 생성기, 목록/세트/사전 파생 및 기타 여러 개념에 관해 유명 인사들이 이야기하는 것을 자주 들었습니까? , 사실 이것은 대기업들이 B인 척하기 위해 전문 용어를 사용하기 때문이 아니라 이러한 것들을 이해해야 합니다. 특히 Python의 데이터 구조 측면에서는 문자열, 목록 등의 기본을 아는 것만으로는 충분하지 않습니다.

오늘은 Python 기초를 한 단계 더 발전시킬 수 있도록 이해하기 어려운 Python의 컨테이너, 반복 가능 개체, 반복자 및 생성기 개념에 대해 설명하겠습니다!

1. 컨테이너

1. 컨테이너란?

Python에서 컨테이너는 여러 요소를 함께 구성하는 데이터 구조입니다. 컨테이너의 요소는 하나씩 반복적으로 얻을 수 있습니다. 직설적으로 말하면 그 기능은 이름과 마찬가지로 사물(데이터)을 저장하는 데 사용됩니다.

컨테이너는 실제로 존재하지 않습니다. 그것은 단지 인간이 만든 개념입니다. 단지 회원 연산자(in 또는 not in)와 함께 사용할 수 있습니다. 개체가 컨테이너 내부에 있는지 확인합니다.

물론 제가 만든 게 아닙니다. 정부에서 만든 것인데, 다른 사람이 이해하지 못하는 이상한 용어를 가르치고 있으니 걱정하지 않으셔도 됩니다. ... python 중앙 수도에서는 그렇게 부릅니다. 일반적인 컨테이너 유형에는 목록(list), 튜플(tuple), 문자열(str), 사전(dict) 및 집합(set)이 포함됩니다.

컨테이너의 데이터는 반복적으로 얻을 수 있으므로 새로운 개념인 반복 가능한 객체를 배워야 합니다.


2. 반복 가능한 객체

1. 반복 가능한 객체란 무엇인가요?

파이썬에서 반복 가능한 객체는 특정 데이터 유형을 참조하는 것이 아니라 요소를 저장하는 컨테이너 객체를 참조합니다.

즉, 컨테이너에 저장된 데이터가 없으면 반복 가능한 객체가 아닙니다. 모든 컨테이너가 반복 가능한 객체를 포함하지만 이에 국한되지는 않습니다.

두 가지 점에 주목하세요:

1.很多容器都是可迭代对象(容器包含了可迭代对象)。

2.一个可迭代对象是不能独立的进行迭代的,迭代是通过for来完成的,凡是可迭代对象都可以直接使用for循环进行访问。
로그인 후 복사

for 루프는 누구나 익숙해야겠죠? for 루프가 어떻게 구현되는지 궁금한 적이 있습니까? 예를 들어, 이 for 루프 예제에서 목록의 모든 요소를 ​​출력할 수 있는 이유는 무엇입니까? 내부적으로 어떻게 구현되나요?

컨테이너, 반복 가능한 객체, 반복자 및 생성기에 대한 Python 상세 분석

사실 for 루프는 두 가지 작업을 수행합니다.

1.使用 __iter__() 返回1个迭代器,迭代器在下面会讲,这里先知道有这么个东西。

2.使用 __next__() 获取迭代器中的每一个元素。
로그인 후 복사

그러면 목록의 각 요소를 출력하는 데 for 루프가 필요하지 않습니다.

l = [1,2,3,4]# for i in l:#     print(i)ite =l.__iter__() #接收一下ietr()干了什么print(ite)  
#打印print(ite.__next__())    
#for循环干第2件事情的时候做的第1步print(ite.__next__())    
#for循环干第2件事情的时候做的第2步print(ite.__next__())   
 #for循环干第2件事情的时候做的第3步print(ite.__next__())    
#for循环干第2件事情的时候做的第4步
로그인 후 복사

출력 결과:

컨테이너, 반복 가능한 객체, 반복자 및 생성기에 대한 Python 상세 분석

it을 인쇄하는 코드 줄을 제거하면 for 루프 출력 목록의 각 요소와 실행 효과가 동일하다는 것을 알 수 있습니다. for 루프는 범위를 4회로 제한하지만 실제로는 __iter__()를 한 번 실행하고 4번 실행합니다. times_ _next__(), 즉 반복 객체에 액세스하는 for 루프의 본질은 이런 방식으로 달성됩니다.

또한 for 루프가 본질적으로 수행하는 두 가지 작업은 필수입니다. 즉, __iter__()가 반복자를 먼저 반환하지 않으면 __next()__는 요소를 얻을 수 없습니다. 앞서 언급한 두 가지 사항 중 두 번째는 반복 가능한 객체를 독립적으로 반복할 수 없다는 것입니다.

동일한 원리와 본질을 가진 두 가지 내장 함수가 있습니다. 일반적으로 내장 함수를 사용하는 것이 더 편리합니다. 최소한 밑줄을 너무 많이 쓸 필요는 없습니다.

内置函数 iter() 的本质是 __inter__() ,也是返回一个迭代器。

内置函数 next() 的本质是 __next__(),也是有了迭代器之后获取元素。
로그인 후 복사

컨테이너, 반복 가능한 객체, 반복자 및 생성기에 대한 Python 상세 분석

결과가 완전히 동일하다는 것을 알 수 있습니다. 반복자(iterator)에 대해 이야기하자면, 반복자가 무엇인지 살펴보겠습니다.

3. Iterator

아마도 위의 for 루프 예제에서 볼 수 있을 것입니다.

只要是实现了__iter__()和__next__()的对象,就是迭代器,迭代器是一个可迭代对象。

总之,迭代器是有__iter__()生成,可以通过__next__()进行调用。
로그인 후 복사

이 경우 Python의 기본을 배울 때 range()가 반복 가능한 객체라고 언급했기 때문에 전달할 수도 있습니다. __iter__()는 반복자를 생성합니다.

컨테이너, 반복 가능한 객체, 반복자 및 생성기에 대한 Python 상세 분석


4. 시퀀스

특별 글 [할당문]에서 시퀀스에 대해 다시 언급하겠습니다. 시퀀스는 리스트, 튜플, 문자열을 포함하는 추상적인 개념이기도 합니다. 그 자체로는 존재하지 않으며, 학습을 용이하게 하기 위해 만들어진 개념적 단어이기도 하다.

可迭代对象包含序列,既然序列包含了列表、元组和字符串,前面我们的例子中也涉及到 了,所以说序列可以被iter()和next()使用

序列可以分为有限序列和无限序列。有限序列就是有范围的,比如说range(10)就已经限定了范围,相反的,无限序列也就是没有限定范围的序列。

我们来生成一个无限序列,这里需要用到1个新模块itertools,itertools用于高效循环的迭代函数集合,它下面有一个方法count(),可生成迭代器且无范围,可以理解为无限迭代器。

컨테이너, 반복 가능한 객체, 반복자 및 생성기에 대한 Python 상세 분석

通过这个例子我们可以看出来,只要执行一次,next()就会获取一次迭代器里面的内容并逐次获取,我这里只写了4个next(),你多写几次就会多输出几次。

像next()这种什么时候需要就什么时候调用的机制叫做懒加载机制,也叫懒汉式加载;

相反地就有饿汉式加载。比如for循环这种的,只要一执行就会把可迭代器里面的所有对象都获取。


五、列表推导式

列表推导式跟生成器有关,在讲生成器之前,需要先知道什么是列表推导式,列表推导式就是生成列表的一种方法,语法是这样的:

l = [i for i in 可迭代对象]
로그인 후 복사

i表示要放进列表里的对象,for循环是一个式子。

比如我们用列表推导式来生成一个列表试试:

l = [i for i in range(5)]print(l)
로그인 후 복사

运行结果:

[0, 1, 2, 3, 4]
로그인 후 복사

运用列表推导式可以很方便地生成我们想要的列表。

同时它也有很多灵活的用法,比如在后面加上条件判断

l = [i for i in range(5) if 4<p>运行结果:</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">[0, 1, 2, 3, 4]
로그인 후 복사

if后面的条件判断为真,则可以正常生成列表,如果为假,则列表推导式是无效的,此时的l将是一个空列表。

还有其他灵活的用法,比如操作前面的i,比如让i的数值全都翻2倍:

컨테이너, 반복 가능한 객체, 반복자 및 생성기에 대한 Python 상세 분석

我们把迭代对象换一下,换成字符串,也同样可以输出,只是*在字符串里面表示重复操作符,所以效果变成了这样:

컨테이너, 반복 가능한 객체, 반복자 및 생성기에 대한 Python 상세 분석

不仅如此,前面的i*2我们还可以用函数来进行操作,比如:

컨테이너, 반복 가능한 객체, 반복자 및 생성기에 대한 Python 상세 분석

总而言之,列表推导式就是用来快速和自定义生成列表的一种方法,很灵活

那么有人可能会举一反三了,列表推导式都是用 [] 来进行操作的,那如果用()来操作行吗?它会不会生成一个元组?我们来看看:

컨테이너, 반복 가능한 객체, 반복자 및 생성기에 대한 Python 상세 분석

[] 换成()之后,返回的是一个生成器generrator ,那么下面我们再来讲讲生成器:


六、生成器

生成器是真实存在于Python中的对象,与容器这种概念词是不同的,它是可以直接通过next()进行调用的。

1.生成器的第一种创建方法:生成器表达式

第一种创建方法跟列表推导式是差不多的,就是 [] 换成了():

l = (i for i in 可迭代对象)
로그인 후 복사

比如我们来生成一个生成器,看看能不能用next()直接调用:

l = (i for i in "abcd")print(next(l))
로그인 후 복사

运行结果:

a
로그인 후 복사

可以看出,生成器是可以直接调用的。那么既然生成器可以被next()调用,那么生成器就是一个特殊的迭代器,是一个可迭代对象

2.生成器的第二种创建方法:yield

除了用上面那种方法创建生成器,还可以用yield来创建,方法如下:

yield 关键字
로그인 후 복사

比如说我们用一个函数中包含yield来创建生成器:

def fun():
    a = 10
    while 1:
        a += 1
        yield a


b = fun()print(b)
로그인 후 복사

运行结果:

<generator></generator>
로그인 후 복사

结果就是生成了一个生成器,而且此时的函数fun()就已经不再是一个函数了,它是一个生成器,只要函数中出现了yield,函数就变成了生成器。

为什么while循环没有一直执行?先不着急,我们输出看看:

def fun():
    a = 10
    while 1:
        a += 1
        yield a


b = fun()print(next(b))print(next(b))print(next(b))
로그인 후 복사

运行结果:

111213
로그인 후 복사

我调用了三次,所以它就运行了三次,while循环虽然存在,但是却不起作用,是因为前面我们提过的懒汉式加载

什么时候需要了,什么时候用next()调用,就是懒汉式加载,不像饿汉式加载那样,提前生成了所有对象,如果这里换成for循环来完成,比如:

def fun():
    a = 10
    while 1:
        a += 1
        print(a)b = fun()
로그인 후 복사

运行之后程序将会进入死循环,一直给a自加1,你可以试试看效果,这就是饿汉式加载提前生成了迭代器并调用了全部迭代器对象,饿汉式加载占用资源的放大镜

七、小结

今天讲的内容可能听起来比较枯燥,这也是没得办法的,有些东西第一次听可能有点”难以下咽“,见得多了之后就习惯了,你得强迫自己去试着接受和理解这些抽象的东西。

最后用一张图来总结一下它们的关系:

컨테이너, 반복 가능한 객체, 반복자 및 생성기에 대한 Python 상세 분석

推荐学习:python教程

위 내용은 컨테이너, 반복 가능한 객체, 반복자 및 생성기에 대한 Python 상세 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP와 Python : 다른 패러다임이 설명되었습니다 PHP와 Python : 다른 패러다임이 설명되었습니다 Apr 18, 2025 am 12:26 AM

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP와 Python 중에서 선택 : 가이드 PHP와 Python 중에서 선택 : 가이드 Apr 18, 2025 am 12:24 AM

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP와 Python : 그들의 역사에 깊은 다이빙 PHP와 Python : 그들의 역사에 깊은 다이빙 Apr 18, 2025 am 12:25 AM

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

Python vs. JavaScript : 학습 곡선 및 사용 편의성 Python vs. JavaScript : 학습 곡선 및 사용 편의성 Apr 16, 2025 am 12:12 AM

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

숭고한 코드 파이썬을 실행하는 방법 숭고한 코드 파이썬을 실행하는 방법 Apr 16, 2025 am 08:48 AM

Sublime 텍스트로 Python 코드를 실행하려면 먼저 Python 플러그인을 설치 한 다음 .py 파일을 작성하고 코드를 작성한 다음 CTRL B를 눌러 코드를 실행하면 콘솔에 출력이 표시됩니다.

vscode에서 코드를 작성하는 위치 vscode에서 코드를 작성하는 위치 Apr 15, 2025 pm 09:54 PM

Visual Studio Code (VSCODE)에서 코드를 작성하는 것은 간단하고 사용하기 쉽습니다. vscode를 설치하고, 프로젝트를 만들고, 언어를 선택하고, 파일을 만들고, 코드를 작성하고, 저장하고 실행합니다. VSCODE의 장점에는 크로스 플랫폼, 무료 및 오픈 소스, 강력한 기능, 풍부한 확장 및 경량 및 빠른가 포함됩니다.

Python에서 비주얼 스튜디오 코드를 사용할 수 있습니다 Python에서 비주얼 스튜디오 코드를 사용할 수 있습니다 Apr 15, 2025 pm 08:18 PM

VS 코드는 파이썬을 작성하는 데 사용될 수 있으며 파이썬 애플리케이션을 개발하기에 이상적인 도구가되는 많은 기능을 제공합니다. 사용자는 다음을 수행 할 수 있습니다. Python 확장 기능을 설치하여 코드 완료, 구문 강조 및 디버깅과 같은 기능을 얻습니다. 디버거를 사용하여 코드를 단계별로 추적하고 오류를 찾아 수정하십시오. 버전 제어를 위해 git을 통합합니다. 코드 서식 도구를 사용하여 코드 일관성을 유지하십시오. 라인 도구를 사용하여 잠재적 인 문제를 미리 발견하십시오.

메모장으로 파이썬을 실행하는 방법 메모장으로 파이썬을 실행하는 방법 Apr 16, 2025 pm 07:33 PM

메모장에서 Python 코드를 실행하려면 Python 실행 파일 및 NPPEXEC 플러그인을 설치해야합니다. Python을 설치하고 경로를 추가 한 후 nppexec 플러그인의 명령 "Python"및 매개 변수 "{current_directory} {file_name}"을 구성하여 Notepad의 단축키 "F6"을 통해 Python 코드를 실행하십시오.

See all articles