Table des matières
1. Itérateur (foreach)
1. Objets itérables
2、迭代器对象
Maison développement back-end Tutoriel Python Comment utiliser les itérateurs et les générateurs en Python

Comment utiliser les itérateurs et les générateurs en Python

May 22, 2023 pm 12:13 PM
python

1. Itérateur (foreach)

1. Objets itérables

Ceux avec la méthode __iter__ intégrée sont appelés objets itérables. __iter__方法的都叫可迭代的对象。

Python内置str、list、tuple、dict、set、file都是可迭代对象。

x = 1.__iter__  # SyntaxError: invalid syntax

# 以下都是可迭代的对象
name = 'nick'.__iter__
print(type(name))  # 'method-wrapper'>
Copier après la connexion

2、迭代器对象

执行可迭代对象的__iter__方法,拿到的返回值就是迭代器对象。

只有字符串和列表都是依赖索引取值的,而其他的可迭代对象都是无法依赖索引取值的,只能使用迭代器对象。

  • 内置有__iter__方法,执行该方法会拿到迭代器本身。

  • 内置__next__

    Les str, list, tuple, dict, set et file intégrés de Python sont tous des objets itérables.
  • s = 'hello'
    iter_s = s.__iter__()
    print(type(iter_s))  # 'str_iterator'> iter_s为迭代器对象
    
    while True:
        try:
            print(iter_s.__next__())
        except StopIteration:
            break
    #hello
    Copier après la connexion
2. Objet itérateur

Exécutez la méthode __iter__ de l'objet itérable, et la valeur de retour obtenue est l'objet itérateur.

Seules les chaînes et les listes reposent sur des valeurs d'index, tandis que les autres objets itérables ne peuvent pas s'appuyer sur des valeurs d'index et ne peuvent utiliser que des objets itérateurs.

Il existe une méthode __iter__ intégrée, et l'exécution de cette méthode obtiendra l'itérateur lui-même.

Méthode __next__ intégrée, l'exécution de cette méthode obtiendra une valeur dans l'objet itérateur.
  • s = 'hello'
    iter_s = iter(s) # 创建迭代器对象
    print(type(iter_s))  #  iter_s为迭代器对象
    
    while True:
        try:
            print(next(iter_s)) # 输出迭代器的下一个元素
    
        except StopIteration:
            break
    # hello
    Copier après la connexion

    3. Les itérateurs ont deux méthodes de base : iter() et next().
  • #str
    name = 'nick' 
    for x in name:
        print(x)
    
    #list
    for x in [None, 3, 4.5, "foo", lambda: "moo", object, object()]:
        print("{0}  ({1})".format(x, type(x)))
    
    #dict
    d = {
        '1': 'tasty',
        '2': 'the best',
        '3 sprouts': 'evil',
        '4': 'pretty good'
    }
    
    for sKey in d:
        print("{0} are {1}".format(sKey, d[sKey]))
    
    #file
    f = open('32.txt', 'r', encoding='utf-8')
    for x in f:
        print(x)
    f.close()
    Copier après la connexion
  • 4. for boucle d'itérateur

    Les objets itérables peuvent être parcourus directement à l'aide d'instructions for régulières
  • La boucle for est appelée une boucle d'itérateur, et le in doit être un objet itérable.

    class MyNumbers:
      def __iter__(self):
        self.a = 1
        return self
     
      def __next__(self):
        if self.a <= 20:
          x = self.a
          self.a += 1
          return x
        else:
          raise StopIteration
     
    myclass = MyNumbers()
    myiter = iter(myclass)
     
    for x in myiter:
      print(x)
    Copier après la connexion

    5. Implémentez les itérateurs (__next__ et __iter__)
Après avoir implémenté les méthodes __iter__() et __next__() dans la classe, vous pouvez l'utiliser comme itérateur. La méthode

__iter__() renvoie un objet itérateur spécial qui implémente la méthode __next__() et signale la fin de l'itération via l'exception StopIteration. La méthode

__next__() renvoie l'objet itérateur suivant.

L'exception StopIteration est utilisée pour marquer la fin de l'itération afin d'éviter les boucles infinies. Dans la méthode __next__(), nous pouvons définir l'exception StopIteration pour qu'elle soit déclenchée après avoir terminé le nombre de boucles spécifié pour terminer l'itération.

Créez un itérateur qui renvoie un nombre. La valeur initiale est 1, incrémente progressivement de 1 et arrête l'exécution après 20 itérations :

class Range:
    def __init__(self, n, stop, step):
        self.n = n
        self.stop = stop
        self.step = step

    def __next__(self):
        if self.n >= self.stop:
            raise StopIteration
        x = self.n
        self.n += self.step
        return x

    def __iter__(self):
        return self


for i in Range(1, 7, 3):
    print(i)

#1
#4
Copier après la connexion

1, plage simulée

class Fib:
    def __init__(self):
        self._a = 0
        self._b = 1

    def __iter__(self):
        return self

    def __next__(self):
        self._a, self._b = self._b, self._a + self._b
        return self._a


f1 = Fib()
for i in f1:
    if i > 100:
        break
    print(&#39;%s &#39; % i, end=&#39;&#39;)

# 1 1 2 3 5 8 13 21 34 55 89
Copier après la connexion
2, séquence de Fibonacci
import sys


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 是一个生成器
print(type(f))  # &#39;generator&#39;>

while True:
    try:
        print(next(f), end=" ")
    except StopIteration:
        sys.exit()
Copier après la connexion

two , Générateur.
  • 1, rendement

    En Python, la fonction qui utilise le rendement est appelée un générateur.
  • Un générateur est une fonction spéciale qui renvoie un itérateur et ne peut être utilisée que pour des opérations itératives. En d’autres termes, un générateur est un itérateur.

    Dans le processus d'appel du générateur pour qu'il s'exécute, la fonction s'arrêtera à chaque fois qu'elle rencontrera un rendement et enregistrera toutes les informations d'exécution actuelles, renverra la valeur de rendement et continuera à s'exécuter à partir de la position actuelle la prochaine fois que la méthode next() sera exécutée. exécuté.
Appelez une fonction génératrice et renvoyez un objet itérateur.

    yield
  • peut être suivi de plusieurs valeurs (peut être de n'importe quel type), mais la valeur renvoyée est de type tuple.

  • Fournir un moyen de personnaliser les itérateurs

yield peut suspendre la fonction et fournir la valeur de retour actuelle

def my_range(start, stop, step=1):
    while start < stop:
        yield start
        start += 1


g = my_range(0, 3)
print(f"list(g): {list(g)}")
Copier après la connexion

yield et return :

La même chose : les deux sont dans Lorsqu'ils sont utilisés en interne dans un fonction, une valeur peut être renvoyée, et il n'y a pas de limite sur le type ou le nombre de valeurs de retour

La différence : return ne peut renvoyer une valeur qu'une seule fois ; rendement peut renvoyer plusieurs valeurs​​🎜🎜🎜🎜2 . Méthode range() personnalisée 🎜
def range(*args, **kwargs):
    if not kwargs:
        if len(args) == 1:
            count = 0
            while count < args[0]:
                yield count
                count += 1
        if len(args) == 2:
            start, stop = args
            while start < stop:
                yield start
                start += 1
        if len(args) == 3:
            start, stop, step = args
            while start < stop:
                yield start
                start += step

    else:
        step = 1

        if len(args) == 1:
            start = args[0]
        if len(args) == 2:
            start, stop = args

        for k, v in kwargs.items():
            if k not in [&#39;start&#39;, &#39;step&#39;, &#39;stop&#39;]:
                raise (&#39;参数名错误&#39;)

            if k == &#39;start&#39;:
                start = v
            elif k == &#39;stop&#39;:
                stop = v
            elif k == &#39;step&#39;:
                step = v

        while start < stop:
            yield start
            start += step


for i in range(3):
    print(i)  # 0,1,2

for i in range(99, 101):
    print(i)  # 99,100

for i in range(1, 10, 3):
    print(i)  # 1,4,7

for i in range(1, step=2, stop=5):
    print(i)  # 1,3

for i in range(1, 10, step=2):
    print(i)  # 1,3,5,7,9
Copier après la connexion
🎜Version complexe : 🎜
t = (i for i in range(10))
print(t)  # <generator object  at 0x00000000026907B0>
print(next(t))  # 0
print(next(t))  # 1
Copier après la connexion
🎜3. Expression génératrice (i.for .in)🎜🎜Remplacez [] dans la compréhension de la liste par () pour obtenir une expression génératrice. 🎜🎜Avantages : par rapport aux compréhensions de listes, il peut économiser de la mémoire et ne génère qu'une seule valeur en mémoire à la fois🎜
with open(&#39;32.txt&#39;, &#39;r&#39;, encoding=&#39;utf8&#39;) as f:
    nums = [len(line) for line in f]  # 列表推导式相当于直接给你一筐蛋

print(max(nums))  # 2


with open(&#39;32.txt&#39;, &#39;r&#39;, encoding=&#39;utf8&#39;) as f:
    nums = (len(line) for line in f)  # 生成器表达式相当于给你一只老母鸡。

print(max(nums))  # ValueError: I/O operation on closed file.
Copier après la connexion
🎜Exemple : 🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP et Python: exemples de code et comparaison PHP et Python: exemples de code et comparaison Apr 15, 2025 am 12:07 AM

PHP et Python ont leurs propres avantages et inconvénients, et le choix dépend des besoins du projet et des préférences personnelles. 1.Php convient au développement rapide et à la maintenance des applications Web à grande échelle. 2. Python domine le domaine de la science des données et de l'apprentissage automatique.

Python vs JavaScript: communauté, bibliothèques et ressources Python vs JavaScript: communauté, bibliothèques et ressources Apr 15, 2025 am 12:16 AM

Python et JavaScript ont leurs propres avantages et inconvénients en termes de communauté, de bibliothèques et de ressources. 1) La communauté Python est amicale et adaptée aux débutants, mais les ressources de développement frontal ne sont pas aussi riches que JavaScript. 2) Python est puissant dans les bibliothèques de science des données et d'apprentissage automatique, tandis que JavaScript est meilleur dans les bibliothèques et les cadres de développement frontaux. 3) Les deux ont des ressources d'apprentissage riches, mais Python convient pour commencer par des documents officiels, tandis que JavaScript est meilleur avec MDNWEBDOCS. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Explication détaillée du principe docker Explication détaillée du principe docker Apr 14, 2025 pm 11:57 PM

Docker utilise les fonctionnalités du noyau Linux pour fournir un environnement de fonctionnement d'application efficace et isolé. Son principe de travail est le suivant: 1. Le miroir est utilisé comme modèle en lecture seule, qui contient tout ce dont vous avez besoin pour exécuter l'application; 2. Le Système de fichiers Union (UnionFS) empile plusieurs systèmes de fichiers, ne stockant que les différences, l'économie d'espace et l'accélération; 3. Le démon gère les miroirs et les conteneurs, et le client les utilise pour l'interaction; 4. Les espaces de noms et les CGROUP implémentent l'isolement des conteneurs et les limitations de ressources; 5. Modes de réseau multiples prennent en charge l'interconnexion du conteneur. Ce n'est qu'en comprenant ces concepts principaux que vous pouvez mieux utiliser Docker.

Comment exécuter des programmes dans Terminal Vscode Comment exécuter des programmes dans Terminal Vscode Apr 15, 2025 pm 06:42 PM

Dans VS Code, vous pouvez exécuter le programme dans le terminal via les étapes suivantes: Préparez le code et ouvrez le terminal intégré pour vous assurer que le répertoire de code est cohérent avec le répertoire de travail du terminal. Sélectionnez la commande Run en fonction du langage de programmation (tel que Python de Python your_file_name.py) pour vérifier s'il s'exécute avec succès et résoudre les erreurs. Utilisez le débogueur pour améliorer l'efficacité du débogage.

Python: automatisation, script et gestion des tâches Python: automatisation, script et gestion des tâches Apr 16, 2025 am 12:14 AM

Python excelle dans l'automatisation, les scripts et la gestion des tâches. 1) Automatisation: La sauvegarde du fichier est réalisée via des bibliothèques standard telles que le système d'exploitation et la fermeture. 2) Écriture de script: utilisez la bibliothèque PSUTIL pour surveiller les ressources système. 3) Gestion des tâches: utilisez la bibliothèque de planification pour planifier les tâches. La facilité d'utilisation de Python et la prise en charge de la bibliothèque riche en font l'outil préféré dans ces domaines.

Qu'est-ce que VScode pour quoi est VScode? Qu'est-ce que VScode pour quoi est VScode? Apr 15, 2025 pm 06:45 PM

VS Code est le code Visual Studio Nom complet, qui est un éditeur de code multiplateforme gratuit et open source et un environnement de développement développé par Microsoft. Il prend en charge un large éventail de langages de programmation et fournit une mise en surbrillance de syntaxe, une complétion automatique du code, des extraits de code et des invites intelligentes pour améliorer l'efficacité de développement. Grâce à un écosystème d'extension riche, les utilisateurs peuvent ajouter des extensions à des besoins et des langues spécifiques, tels que les débogueurs, les outils de mise en forme de code et les intégrations GIT. VS Code comprend également un débogueur intuitif qui aide à trouver et à résoudre rapidement les bogues dans votre code.

L'extension VScode est-elle malveillante? L'extension VScode est-elle malveillante? Apr 15, 2025 pm 07:57 PM

Les extensions de code vs posent des risques malveillants, tels que la cachette de code malveillant, l'exploitation des vulnérabilités et la masturbation comme des extensions légitimes. Les méthodes pour identifier les extensions malveillantes comprennent: la vérification des éditeurs, la lecture des commentaires, la vérification du code et l'installation avec prudence. Les mesures de sécurité comprennent également: la sensibilisation à la sécurité, les bonnes habitudes, les mises à jour régulières et les logiciels antivirus.

Comment installer nginx dans Centos Comment installer nginx dans Centos Apr 14, 2025 pm 08:06 PM

CENTOS L'installation de Nginx nécessite de suivre les étapes suivantes: Installation de dépendances telles que les outils de développement, le devet PCRE et l'OpenSSL. Téléchargez le package de code source Nginx, dézippez-le et compilez-le et installez-le, et spécifiez le chemin d'installation AS / USR / LOCAL / NGINX. Créez des utilisateurs et des groupes d'utilisateurs de Nginx et définissez les autorisations. Modifiez le fichier de configuration nginx.conf et configurez le port d'écoute et le nom de domaine / adresse IP. Démarrez le service Nginx. Les erreurs communes doivent être prêtées à prêter attention, telles que les problèmes de dépendance, les conflits de port et les erreurs de fichiers de configuration. L'optimisation des performances doit être ajustée en fonction de la situation spécifique, comme l'activation du cache et l'ajustement du nombre de processus de travail.

See all articles