Τι είναι οι γεννήτριες στο Python και πώς να τις χρησιμοποιήσετε;



Μάθετε τι είναι οι γεννήτριες στο Python μαζί με τα πλεονεκτήματα. Μάθετε επίσης πώς να τα δημιουργείτε και να τα χρησιμοποιείτε μαζί με διάφορες περιπτώσεις χρήσης.

Η δημιουργία επαναληπτικών προγραμμάτων ή αντικειμένων που επιτρέπουν την απομάκρυνσή τους θεωρείται επαχθής εργασία. Αλλά σε , η εφαρμογή αυτού του επώδυνου έργου γίνεται πολύ ομαλή. Ας προχωρήσουμε και ρίξτε μια πιο προσεκτική ματιά στις Generators στο Python.

Ακολουθεί μια λίστα με όλα τα θέματα που καλύπτονται σε αυτό το άρθρο:





Ας ξεκινήσουμε. :)

Τι είναι οι γεννήτριες στο Python;

Οι γεννήτριες είναι βασικά συναρτήσεις που επιστρέφουν ανιχνεύσιμα αντικείμενα ή αντικείμενα. Αυτές οι λειτουργίες δεν παράγουν όλα τα στοιχεία ταυτόχρονα, αλλά παράγουν ένα κάθε φορά και μόνο όταν απαιτείται. Όποτε το περιλαμβάνεται για να επαναλάβει ένα σύνολο στοιχείων, εκτελείται μια λειτουργία γεννήτριας. Οι γεννήτριες έχουν επίσης πολλά πλεονεκτήματα.



Πλεονεκτήματα της χρήσης Generators

  • Χωρίς γεννήτριες στο Python, η παραγωγή επαναληπτικών προγραμμάτων είναι εξαιρετικά δύσκολη και χρονοβόρα.

  • Οι γεννήτριες είναι εύκολο να εφαρμοστούν καθώς εφαρμόζουν αυτόματα __iter __ (), __next __ () και StopIteration που διαφορετικά, πρέπει να προσδιοριστούν ρητά.



  • Η μνήμη αποθηκεύεται καθώς τα στοιχεία παράγονται όπως απαιτείται, σε αντίθεση με το κανονικό . Αυτό το γεγονός γίνεται πολύ σημαντικό όταν πρέπει να δημιουργήσετε έναν τεράστιο αριθμό επαναληπτικών. Αυτό θεωρείται επίσης ως το μεγαλύτερο πλεονέκτημα των γεννητριών.

  • Μπορεί να χρησιμοποιηθεί για την παραγωγή ενός άπειρου αριθμού αντικειμένων.

  • Μπορούν επίσης να χρησιμοποιηθούν για τη διοχέτευση ορισμένων εργασιών

Κανονικές λειτουργίες έναντι λειτουργιών γεννήτριας:

Οι γεννήτριες στο Python δημιουργούνται όπως ακριβώς δημιουργείτε χρησιμοποιώντας τη λέξη-κλειδί «def». Όμως, οι λειτουργίες Generator χρησιμοποιούν τη λέξη-κλειδί απόδοσης αντί για επιστροφή. Αυτό γίνεται για να ειδοποιηθεί ο διερμηνέας ότι πρόκειται για επανάληψη. Όχι μόνο αυτό, οι λειτουργίες της γεννήτριας εκτελούνται όταν καλείται η επόμενη συνάρτηση () και όχι με το όνομά τους όπως στην περίπτωση των κανονικών λειτουργιών. Εξετάστε το παρακάτω παράδειγμα για να το κατανοήσετε καλύτερα:

ΠΑΡΑΔΕΙΓΜΑ:

def func (a): απόδοση a = [1,2,3] b = func (a) επόμενο (b)

ΠΑΡΑΓΩΓΗ: [1, 2, 3]

μεταπτυχιακό πιστοποιητικό έναντι μεταπτυχιακών

Όπως μπορείτε να δείτε, στην παραπάνω έξοδο, το func () χρησιμοποιεί τη λέξη-κλειδί απόδοσης και την επόμενη συνάρτηση για την εκτέλεσή της. Όμως, για κανονική λειτουργία θα χρειαστείτε το ακόλουθο κομμάτι κώδικα:

ΠΑΡΑΔΕΙΓΜΑ:

def func (a): επιστροφή a a = [1,2,3] func (a)

ΠΑΡΑΓΩΓΗ: [1, 2, 3]

Εάν κοιτάξετε το παραπάνω παράδειγμα, ίσως αναρωτιέστε γιατί να χρησιμοποιήσετε μια λειτουργία Generator όταν η κανονική λειτουργία επιστρέφει επίσης την ίδια έξοδο. Ας προχωρήσουμε λοιπόν και να δούμε πώς να χρησιμοποιούμε Generators στο Python.

Χρήση λειτουργιών Generator:

Όπως αναφέρθηκε προηγουμένως, οι Γεννήτριες στην Python παράγουν επαναλαμβανόμενα ένα κάθε φορά. Ρίξτε μια ματιά στο ακόλουθο παράδειγμα:

ΠΑΡΑΔΕΙΓΜΑ:

def myfunc (a): ενώ a> = 3: απόδοση a = a + 1 b = myfunc (a) εκτύπωση (b) επόμενο (b)

Όταν εκτελείτε την ακόλουθη λειτουργία, θα δείτε την ακόλουθη έξοδο:

ΠΑΡΑΓΩΓΗ: 4

Εδώ, ένα επαναλαμβανόμενο αντικείμενο έχει επιστραφεί ικανοποιώντας την συνθήκη. Μετά την εκτέλεση, το στοιχείο ελέγχου μεταφέρεται στον καλούντα. Σε περίπτωση που απαιτούνται περισσότερα στοιχεία, η ίδια λειτουργία πρέπει να εκτελεστεί ξανά καλώντας την επόμενη () συνάρτηση.

επόμενο (β)

ΠΑΡΑΓΩΓΗ: 5

Σε περαιτέρω εκτελέσεις, η συνάρτηση θα επιστρέψει 6,7 κ.λπ. Οι λειτουργίες της γεννήτριας στην Python εφαρμόζουν αυτόματα τις μεθόδους __iter __ () και __επόμενη __ (). Επομένως, μπορείτε να επαναλάβετε τα αντικείμενα χρησιμοποιώντας απλώς την επόμενη () μέθοδο. Όταν η δημιουργία στοιχείων πρέπει να τερματιστεί, οι λειτουργίες της γεννήτριας εφαρμόζουν το Διακοπή εσωτερικά χωρίς να χρειάζεται να ανησυχείτε τον καλούντα. Εδώ είναι ένα άλλο παράδειγμα αυτού:

ΠΑΡΑΔΕΙΓΜΑ:

a = 2 def myfunc (a): ενώ a> = 0: απόδοση a - = 1 b = myfunc (a) εκτύπωση (b) επόμενο (b)

ΠΑΡΑΓΩΓΗ:

StopIteration-Generators στο Python-EdurekaΗ παραπάνω εικόνα δείχνει την εκτέλεση του προγράμματος που απαιτείται πολλές φορές. Εάν προσπαθήσετε να καλέσετε ξανά την επόμενη συνάρτηση, επιστρέφει ένα μήνυμα που απεικονίζει Διακοπή έχει εφαρμοστεί. Εάν προσπαθήσετε να το κάνετε αυτό με κανονικές συναρτήσεις, οι τιμές που επιστρέφονται δεν θα αλλάξουν ούτε θα επαναληφθούν. Ρίξτε μια ματιά στο παρακάτω παράδειγμα:

ΠΑΡΑΔΕΙΓΜΑ:

def z (): n = 1 απόδοση n n = n + 3 απόδοση n p = z () επόμενο (p)

ΠΑΡΑΓΩΓΗ:

Γεννήτριες με βρόχους:

Σε περίπτωση που θέλετε να εκτελέσετε την ίδια λειτουργία ταυτόχρονα, μπορείτε να χρησιμοποιήσετε το βρόχο «για». Αυτός ο βρόχος βοηθάει να επαναληφθεί πάνω στα αντικείμενα και μετά από όλες τις υλοποιήσεις εκτελεί το StopIteration.

ΠΑΡΑΔΕΙΓΜΑ:

def z (): n = 1 απόδοση n n = n + 3 απόδοση n για x σε z (): εκτύπωση (x)

ΠΑΡΑΓΩΓΗ:

βρείτε τον μέγιστο αριθμό σε πίνακα java

ένας
4

Μπορείτε επίσης να καθορίσετε εκφράσεις για να δημιουργήσετε επαναλαμβανόμενα αντικείμενα.

Εκφράσεις γεννητριών:

Μπορείτε επίσης να χρησιμοποιήσετε εκφράσεις μαζί με το βρόχο για να δημιουργήσετε επαναληπτικούς. Αυτό καθιστά συνήθως την παραγωγή επαναληπτική πολύ εύκολη. Η έκφραση της γεννήτριας μοιάζει με κατανόηση λίστας και παρόμοια Λάμδα λειτουργίες , οι εκφράσεις γεννήτριας δημιουργούν ανώνυμες λειτουργίες γεννήτριας.

Ρίξτε μια ματιά στο παρακάτω παράδειγμα:

ΠΑΡΑΔΕΙΓΜΑ:

a = range (6) print ('List Comprehension', end = ':') b = [x + 2 for x in a] print (b) print ('Generator express', end = ': n') c = (x + 2 για x σε a) εκτύπωση (c) για y σε c: εκτύπωση (y)

ΠΑΡΑΓΩΓΗ:

Κατανοή λίστας: [2, 3, 4, 5, 6, 7]

Έκφραση γεννήτριας:

2
3
4
5
6

Όπως μπορείτε να δείτε, στην παραπάνω έξοδο, η πρώτη έκφραση είναι μια κατανόηση λίστας που καθορίζεται σε αγκύλες []. Η κατανόηση λίστας παράγει την πλήρη λίστα στοιχείων ταυτόχρονα. Το επόμενο είναι μια παράσταση γεννήτριας που επιστρέφει τα ίδια αντικείμενα αλλά ένα κάθε φορά. Προσδιορίζεται χρησιμοποιώντας αγκύλες ().


Γεννήτριαλειτουργίες μπορούν να χρησιμοποιηθούν και σε άλλες λειτουργίες.Για παράδειγμα:

ΠΑΡΑΔΕΙΓΜΑ:

a = εύρος (6) εκτύπωση ('Generator expression', end = ': n') c = (x + 2 for x in a) print (c) print (min (c))

ΠΑΡΑΓΩΓΗ:

Έκφραση γεννήτριας
2

Το παραπάνω πρόγραμμα εκτυπώνει την ελάχιστη τιμή όταν η παραπάνω έκφραση εφαρμόζεται στις τιμές του a.

Θήκες χρήσης:

Ας χρησιμοποιήσουμε Generators στο προς το:

  • Δημιουργία σειράς Fibonacci
  • Δημιουργία αριθμών

Δημιουργία σειράς Fibonacci:

Η σειρά Fibonacci όπως όλοι γνωρίζουμε είναι μια σειρά αριθμών όπου κάθε αριθμός είναι ένα άθροισμα των προηγούμενων δύο αριθμών. Οι δύο πρώτοι αριθμοί είναι 0 και 1. Εδώ είναι ένα πρόγραμμα γεννήτριας για τη δημιουργία σειράς Fibonacci:

ΠΑΡΑΔΕΙΓΜΑ:

def fibo (): πρώτο, δεύτερο = 0,1 ενώ True: απόδοση πρώτο πρώτο, δεύτερο = δεύτερο, πρώτο + δευτερόλεπτο για x in fibo (): εάν x> 50: διακοπή εκτύπωσης (x, τέλος = ')

ΠΑΡΑΓΩΓΗ:

0 1 1 2 3 5 8 13 21 34

Η παραπάνω έξοδος δείχνει τη σειρά Fibonacci με τιμές μικρότερες από 50. Ας ρίξουμε τώρα μια ματιά στον τρόπο δημιουργίας μιας λίστας αριθμών.

Δημιουργία αριθμών:

Σε περίπτωση που θέλετε να δημιουργήσετε καθορισμένους αριθμούς λίστας, μπορείτε να το κάνετε χρησιμοποιώντας λειτουργίες γεννήτριας. Ρίξτε μια ματιά στο ακόλουθο παράδειγμα:

ΠΑΡΑΔΕΙΓΜΑ:

a = εύρος (10) b = (x για x σε a) εκτύπωση (b) για y σε b: εκτύπωση (y)

ΠΑΡΑΓΩΓΗ:

0
ένας
2
3
4
5
6
7
8
9

ΠΑΡΑΔΕΙΓΜΑ:

a = εύρος (2,10,2) b = (x για x σε a) εκτύπωση (b) για y σε b: εκτύπωση (y)

ΠΑΡΑΓΩΓΗ:

σε ποιες περιπτώσεις χρησιμοποιείται το nagios


2
4
6
8

Το παραπάνω πρόγραμμα επέστρεψε ζυγούς αριθμούς από 2 έως 10. Αυτό μας φέρνει στο τέλος αυτού του άρθρου σχετικά με τις Γεννήτριες στην Python. Ελπίζω να έχετε κατανοήσει όλα τα θέματα.

Βεβαιωθείτε ότι ασκείστε όσο το δυνατόν περισσότερο και επαναφέρετε την εμπειρία σας.

Έχετε μια ερώτηση για εμάς; Παρακαλώ αναφέρετέ το στην ενότητα σχολίων αυτού του ιστολογίου 'Generators in Python' και θα επικοινωνήσουμε μαζί σας το συντομότερο δυνατό.

Για να μάθετε σε βάθος την Python μαζί με τις διάφορες εφαρμογές της, μπορείτε να εγγραφείτε ζωντανά με υποστήριξη 24/7 και πρόσβαση σε όλη τη διάρκεια ζωής.