Notes sur Python (XVI): générateur et Itérateur

Une semaine de bol 2021-10-29 12:31:54
notes sur python xvi rateur

Petite connaissance,Grand défi!Cet article participe“Les programmeurs ont besoin de peu de connaissances”Activités créatives.

Bonjour tout le monde,Je suisUne semaine de bol,Celui qui ne veut pas être bu(Volume interne)Avant.Si l'article écrit a la chance d'avoir votre faveur,Quelle chance~

Générateur

Vous pouvez maintenant créer une liste directement à partir du constructeur,Mais en raison de contraintes de mémoire,La capacité de la liste est certainement limitée,Si nous avions besoin d'une liste de centaines d'éléments,Mais seulement quelques - uns d'entre eux sont visités à chaque fois,Alors le reste de l'élément est un gaspillage de mémoire sans utilisation.

À ce moment - là.GénérateurGenerator)Ça a marché.,Il produit constamment de nouvelles données selon un algorithme,Jusqu'à ce qu'une condition spécifiée soit remplie

Il y a plusieurs façons d'obtenir la génération:

  1. Le générateur est obtenu par la génération de liste,Voici un exemple de code::

    g = (x for x in range(10)) # Générer la liste pour la colonne[]Changer pour devenir()
    # Imprimer son type
    print(type(g)) # <class 'generator'>
    # Appelez ses éléments
    print(g.__next__()) # 0
    print(g.__next__()) # 1
    print(g.__next__()) # 2
    print(g.__next__()) # 3
    print(g.__next__()) # 4
    # Utiliser.__next__Appelé de la manière
    print(next(g)) # 5
    print(next(g)) # 6
    print(next(g)) # 7
    print(next(g)) # 8
    print(next(g)) # 9
    # Utilisernext()Appel de méthode pour
    print(next(g)) # Une erreur est signalée lorsque les données ne sont pas appelées StopIteration
    Copier le Code

    Combien d'appels sont nécessaires , Ce qui n'est pas appelé ne sera pas généré , Il n'y aura pas d'espace mémoire , Une structure circulaire peut être utilisée pour appeler au besoin

    g = (x for x in range(10)) # Générer la liste pour la colonne[]Changer pour devenir()
    skip = True # Conditions de jugement
    count = 0 # Nombre d'appels
    while skip:
    count += 1 # Boucle une fois+1
    print(next(g))
    if count > 9:
    break # Sortir de la boucle
    Copier le Code
  2. Utilisez la fonction avec l'aide de yield Mot - clé pour compléter un générateur ,GénérerSérie FibonacciAvant20Nombre,Voici un exemple de code::

    def fun(length):
    a, b = 0, 1
    for _ in range(length):
    a, b = b, a + b
    yield a
    fib = fun(20)
    print(type(fib)) # <class 'generator'> # Type d 'impression
    count = 0
    while count < 20:
    # 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
    print(next(fib), "", end="")
    count += 1
    Copier le Code

    Le processus est le suivant:

    Pendant l'exécution,Rencontreyield Le mot - clé interrompt l'exécution , Le prochain appel reprend à partir de l'endroit où il a été mis en pause , Parce que c'est une déclaration circulaire , Tout va passer directement à forDéclarations

    Si vous appelezyield, J'ai besoin d'une valeur ,On va l'utiliser..send()Voilà..Voici un exemple de code::

    def fun(num):
    n = 0
    for i in range(num + 1):
    n += i
    ret = yield n
    print(f"C'est+À{ret}De{i + 1} Une fois")
    g = fun(3)
    print(g.send(None))
    print(g.send('3'))
    print(g.send('3'))
    print(g.send('3'))
    '''
    ---Résultats obtenus---
    0
    C'est+À 3 De 1 Une fois
    1
    C'est+À 3 De 2 Une fois
    3
    C'est+À 3 De 3 Une fois
    6
    '''
    Copier le Code

    send L'ajout d'un générateur peut rendre le générateur plus flexible , Mais il est important de noter que le générateur a été appelé pour la première fois send()La méthode, Le paramètre ne peut être que None,Sinon, une exception sera lancée. Bien sûr, on peut aussi appeler send() La méthode est appelée une fois avant next()Méthodes, Le but est de faire entrer le générateur en premier yieldExpression.

Itérateur et générateur itérable

Les objets itérables ont des générateurs 、Tuple、Liste、Ensemble、 Dictionnaires et chaînes, etc.

AdoptioncollectionsDeIterableCombinaison de fonctionsisinstance(object, classinfo) Pour juger un objet qui n'est pas itératif

L'itération est un moyen d'accéder aux éléments d'une collection.L'Itérateur est un objet qui se souvient de l'emplacement de la traversée.L'objet Itérateur est accessible à partir du premier élément de la collection,Jusqu'à la fin de l'accès à tous les éléments.L'Itérateur ne peut qu'avancer, pas reculer. Très générateur est aussi Itérateur .

Peut êtrenext ()L'objet que la fonction appelle et renvoie continuellement la valeur suivante est appelé l'Itérateur: Iterator ,Peut être utiliséisinstance() Déterminer si un objet est IteratorObjet:

Attention!: Le générateur n'est pas nécessairement itératif , Mais le générateur doit être itératif .

Mettre les tuples 、Liste、Ensemble、 Dictionnaires et chaînes, etc. IterableDevenirIteratorPeut être utiliséiter()Fonctions

IterableEtIterator****La différence entre- Oui.Iterable Peut être utilisé comme for Un terme générique pour les objets en boucle ;EtIterator L'objet doit être next() L'appel de fonction renvoie continuellement les données suivantes , Jusqu'à ce qu'il n'y ait pas de données StopIterationErreur, Et sa longueur ne sera pas connue avant ,Alors...Iterator Les calculs sont inertes ,Seulementnext() La fonction lui demande de retourner les résultats ,Iterator Peut même représenter un flux infini de données , Comme tous les nombres naturels .

from collections.abc import Iterable, Iterator
a = [1, 2, 3]
b = {1, 2, 3}
c = (1, 2, 3)
d = "123"
e = 123
f = (x for x in range(5))
# Imprimer le type de données
print(type(a)) # <class 'list'>
print(type(b)) # <class 'set'>
print(type(c)) # <class 'tuple'>
print(type(d)) # <class 'str'>
print(type(e)) # <class 'int'>
print(type(f)) # <class 'generator'>
print("-" * 20)
# Si l'impression est un objet itérable
print(isinstance(a, Iterable)) # True
print(isinstance(b, Iterable)) # True
print(isinstance(c, Iterable)) # True
print(isinstance(d, Iterable)) # True
print(isinstance(e, Iterable)) # False
print(isinstance(f, Iterable)) # True
print("-" * 20)
# Sauf que les chaînes sont des objets itérables
# Si l'impression est un Itérateur
print(isinstance(a, Iterator)) # False
print(isinstance(b, Iterator)) # False
print(isinstance(c, Iterator)) # False
print(isinstance(d, Iterator)) # False
print(isinstance(f, Iterator)) # True
# Seulementf(Générateur)C'est un Itérateur.
print("-" * 20)
# Adoptioniter() Convertir les itérations en itérateurs
print(isinstance(iter(a), Iterator)) # True
print(isinstance(iter(b), Iterator)) # True
print(isinstance(iter(c), Iterator)) # True
print(isinstance(iter(d), Iterator)) # True
Copier le Code
版权声明
本文为[Une semaine de bol]所创,转载请带上原文链接,感谢
https://pythonmana.com/2021/10/20211029123151359A.html

  1. Python crawler selenium framework. You can start with these five questions | Python skill tree
  2. It is said that Python is omnipotent. It's really good to see Liyang photography circle with Python this time
  3. 【Python 爬虫】 4、爬虫基本原理
  4. 【Python 爬蟲】 4、爬蟲基本原理
  5. 【 Python crawler】 4. Principes de base du crawler
  6. 这道python题到底应该要怎么做
  7. Que doit faire exactement ce problème Python
  8. Après l'importation des variables du module Python, les valeurs imprimées sont fixes.
  9. Nouveau singe Muzi Lee: 0 cours de formation Python de base types de hachage pour les opérations Python redis
  10. Looking at problems from a fresh perspective: analyzing selenium principle from the perspective of Python
  11. Insérez le format de date dans la base de données MySQL en python et ne l'exécutez pas.
  12. Try Python 3.10 with CONDA
  13. Répondez en python et demandez à quelqu'un de vous aider.
  14. Un simple problème de travail Python, qui ne fonctionne pas
  15. Problèmes d'écriture Python pour la boucle
  16. Comment Python exécute les commandes du programme à plusieurs reprises au lieu de quitter
  17. YYDS! Dexplot: one line of Python code to easily draw statistical charts!
  18. pandas生成的透视表如何和源数据一起保存
  19. pandas生成的透視錶如何和源數據一起保存
  20. Comment sauvegarder le tableau pivot généré par pandas avec les données sources
  21. 10 fois plus efficace avec cache dans le développement de Django
  22. 求Python *.svg文件操作方法
  23. 求Python *.svg文件操作方法
  24. Trouver la méthode de fonctionnement du fichier Python *.Svg
  25. 【 python】 Internal Guide for Unit Test Practice
  26. 用Python编程佩尔数列pell数列循环结构
  27. 【 python】 échafaudage fastapi: spécification du développement du projet d'interface arrière fastapi
  28. [Python] restful Specification Practice Based on fastapi
  29. Python代码阅读(第26篇):将列表映射成字典
  30. How to use Python to make a screen color extractor with Exe file
  31. Lecture du Code Python (article 26): cartographie des listes dans les dictionnaires
  32. Python代码阅读(第26篇):将列表映射成字典
  33. Python代碼閱讀(第26篇):將列錶映射成字典
  34. Lecture du Code Python (article 26): cartographie des listes dans les dictionnaires
  35. 使用 Python 进行数据可视化之Seaborn
  36. Real time access to stock data, free—— Python crawler Sina stock actual combat
  37. Seaborn pour la visualisation des données en python
  38. 浅识XPath(熟练掌握XPath的语法)【python爬虫入门进阶】(03)
  39. Python中if else语句进行操作的时候哪里除了错,搞不懂
  40. Python题,我刚学,还不会
  41. Python題,我剛學,還不會
  42. Je viens d'apprendre, pas encore.
  43. 云计算开发:Python3-find()方法详解
  44. Real time access to stock data, free—— Python crawler Sina stock actual combat
  45. Développement de l'informatique en nuage: détails de la méthode Python 3 - find ()
  46. 如何使用Python进行超参调参和调优
  47. 如何使用Python進行超參調參和調優
  48. Comment utiliser Python pour le réglage hyperparamétrique
  49. Première connaissance du module urllib Python
  50. Python入门:看了这篇文章如果1个小时没法入门Python,那么还是换个语言吧!!
  51. Python(day1):Python 3 教程
  52. Python(day3):Python3 安装与环境搭建
  53. Python (day3): installation et environnement Python 3
  54. Python (day1): tutoriel Python 3
  55. Démarrer avec Python: Si vous ne pouvez pas commencer avec Python en une heure, changez de langue!!
  56. Pandas:DataFrame对象的基础操作
  57. 关于#python#的问题:月球上物体的体重在地球上的16.5%,编写程序输出未来10年在地球上和月球上的体重状况
  58. 反转一个3位整数(Python 实现)
  59. Questions sur # Python #: les objets lunaires pèsent 16,5% de la masse de la terre et un programme est programmé pour produire la masse de la terre et de la lune au cours des 10 prochaines années
  60. Use of Python pandas!!!!! Explain in detail