Génération de séquences avec un mot-clé Python Rende
Le mot-clé de rendement est utilisé pour créer des générateurs, générer des valeurs à la demande et enregistrer la mémoire. 1. Remplacer le retour pour générer des séquences finies, telles que les séquences de Fibonacci; 2. Implémentez des séquences infinies, telles que les séquences naturelles; 3. Profiter les big data ou les lectures de fichiers et les traiter ligne par ligne pour éviter le débordement de la mémoire; 4. Notez que le générateur ne peut traverser qu'une seule fois et peut être appelé par suivant () ou pour la boucle.
Si vous voulez savoir comment utiliser le mot clé yield
de Python pour générer des séquences, sa plus grande fonction est de vous aider à créer un générateur pour générer des valeurs si nécessaire en cas de besoin, plutôt que de stocker toutes les données en mémoire à la fois.

Ceci est particulièrement utile pour traiter de grandes quantités de données ou de séquences infinies.
Jetons un coup d'œil à plusieurs scénarios d'utilisation courants et méthodes d'écriture.

Créer une séquence numérique simple avec le rendement
Le moyen le plus courant est return
une séquence à la place. La différence est que lorsqu'une fonction rencontre yield
, elle interrompra l'exécution et conservera l'état actuel, puis continuera à exécuter après l'appel suivant.
Par exemple, vous souhaitez écrire une fonction qui génère une séquence Fibonacci:

def fib_Sequence (n): A, b = 0, 1 tandis qu'un <n: céder un A, b = b, ab
De cette façon, vous pouvez obtenir la valeur étape par étape comme ceci:
pour num dans fib_Sequence (100): imprimer (num)
Cette méthode est beaucoup plus d'économie de mémoire que de créer une liste complète, surtout lorsque vous n'avez besoin que d'itérer.
Le rendement implémente un générateur de séquence infini
Parfois, vous voudrez peut-être générer une séquence "infinie", comme une séquence naturelle qui commence par 1 et est ajoutée à 1. Dans ce cas, cela ne fonctionnera certainement pas si vous utilisez une liste normale, mais il est facile d'utiliser yield
.
Par exemple:
def infinite_numbers (): num = 1 Bien que vrai: Num de rendement num = 1
Vous pouvez prendre les premiers chiffres comme celui-ci:
compteur = infinite_numbers () Imprimer (suivant (compteur)) # 1 Imprimer (suivant (compteur)) # 2
Bien sûr, lorsque vous l'utilisez dans une utilisation réelle, vous devez prêter attention au contrôle du nombre de cycles, sinon il entrera dans un cycle mort.
Le rendement gère les mégadonnées ou la lecture de fichiers
En plus des séquences mathématiques, yield
est également utile lorsqu'il traite de grands fichiers ou de flux de données. Par exemple, si vous lisez un fichier journal de plusieurs GB, il est évidemment inapproprié de le charger en mémoire en même temps, vous pouvez utiliser le générateur pour le lire ligne par ligne.
Exemple:
def read_large_file (file_path): avec open (file_path, 'r') comme f: pour la ligne en f: LIBEAL LINE.STRIP ()
De cette façon, vous ne lisez qu'une seule ligne à la fois et ne prendra pas trop de ressources:
pour log_line dans read_large_file ('immense_log.txt'): processus (log_line) # Supposons que ce soit votre logique de traitement
Cette méthode est très pratique lors de l'analyse des données, du traitement ETL ou du log.
Quelques conseils: où le rendement est facile à ignorer lors de l'utilisation
- La fonction de rendement renvoie un objet générateur , pas un résultat direct, et doit être déclenché avec
next()
oufor
Loop. - Le générateur ne peut être traversé qu'une seule fois, et vous devez rappeler à nouveau la fonction pour créer un nouvel objet.
- Si vous souhaitez obtenir tous les résultats du générateur, vous pouvez le convertir en liste:
list(my_generator())
- Le rendement peut être utilisé avec la méthode Send () pour réaliser une communication bidirectionnelle, mais il s'agit d'une utilisation avancée et n'est généralement pas couramment utilisée.
Fondamentalement, c'est tout. L'utilisation yield
peut rendre votre code plus efficace et plus élégant, en particulier lorsqu'il s'agit de séquences, de données en streaming ou de grands ensembles de données.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

TheObserverdesignpatternenablesautomaticnotificationofdependentobjectswhenasubject'sstatechanges.1)Itdefinesaone-to-manydependencybetweenobjects;2)Thesubjectmaintainsalistofobserversandnotifiesthemviaacommoninterface;3)Observersimplementanupdatemetho

L'utilisation de SLF4J combinée avec la journalisation ou le log4j2 est le moyen recommandé de configurer les journaux dans les applications Java. Il introduit des bibliothèques API et implémentation en ajoutant des dépendances Maven correspondantes; 2. Obtenez l'enregistreur via le loggerfactory de SLF4J dans le code et écrivez le code journal découplé et efficace à l'aide de méthodes de journalisation paramétrée; 3. Définir le format de sortie du journal, le niveau, la cible (console, le fichier) et le contrôle du journal du package via Logback.xml ou les fichiers de configuration log4j2.xml; 4. Activer éventuellement la fonction de balayage de fichiers de configuration pour atteindre un ajustement dynamique du niveau de journal, et Springboot peut également être géré via des points de terminaison de l'actionneur; 5. Suivez les meilleures pratiques, y compris

Préparez-vous en application par rapport à Mavenorgradletobuildajarorwarfile, externalisationConfiguration.2.ChoOSEADPLOYENDIRONMENT: Runonbaremetal / vmwithjava-jarandsystemd, deploywarontomcat, compeneriserisewithdocker, orusecloudplatformslikelise.

CASTORENablesxml-to-javaObjectMappingViadefaultConverionsOrexplicitMappingFiles; 1) DefinejavaclasseswithGetters / seters; 2) useUnmarShallertOConvertXmltoObjects; 3)

Les fonctions mutables de PHP sont implémentées via l'opérateur SPLAT (...). 1. Collectez les paramètres dans la définition de la fonction, tels que FunctionSum (... $ nombres) pour agréger les paramètres passés dans un tableau; 2. Utilisez le tableau ... Démacklez lorsque vous appelez la fonction, comme ADD (... [1,2,3]) pour passer les éléments du tableau comme paramètres indépendants; Cet opérateur améliore la lisibilité du code, la sécurité et les performances des types, remplace les anciennes méthodes telles que func_get_args () et est largement utilisée dans des scénarios avec des paramètres incertains tels que le résumé, l'exploitation forestière, etc.

$ _CookieisaphpsuperglobalForAccessingCooKiessentByThebrowser; cookiesAreSetingSetCooKie () BeforeOutput, ReadVia $ _cookie ['name'], Updated Resenderwithnewvalues, anddeletedBysetinganExpiredtimestamp, withsecurit

Créez un point de terminaison WebSocket Server pour définir le chemin à l'aide de @ServeRendPoint et gérer les connexions, la réception de messages, la fermeture et les erreurs via @onOpen, @onMessage, @OnClose et @onerror; 2. Assurez-vous que les dépendances Javax.websocket-API sont introduites pendant le déploiement et enregistrées automatiquement par le conteneur; 3. Le client Java obtient WebSocketContainer via le ContainerProvider, appelle ConnectToServer pour se connecter au serveur et reçoit des messages à l'aide de la classe d'annotation @clientendpoint; 4. Utilisez la session GetBasicre

TheassertKeywordInjavaisUsedTovalIdateShandshandingsDuringDevelopment, ThrowinganAssertionErroriftheconditionisfalse.2.ithastwoforms: AssertCondition; AndSersertCondition: Message; avecthelatterProvidActureCustomerMessage.3.
