Heim  >  Artikel  >  Backend-Entwicklung  >  Erweiterte Funktionen für den Einstieg in Python

Erweiterte Funktionen für den Einstieg in Python

黄舟
黄舟Original
2016-12-16 16:34:421336Durchsuche

Vorwort

Es kann etwas schwierig sein, erweiterte Funktionen zu erlernen, die in C/C++ noch nicht vorhanden waren, und C/C++ unterstützt diese einfache, aber leistungsstarke Syntax.

2 Scheiben

Apropos Schneiden: Sie können sich vorstellen, einen Rettich zu schneiden und einen bestimmten Teil des Rettichs zu erhalten. Dies ist hier eine sehr passende Metapher für das Schneiden. Der Slicing-Vorgang in Python besteht darin, ein bestimmtes Segment der Liste oder des Tupels zu übernehmen.

Zum Beispiel gibt es eine Liste, die wie folgt definiert ist:

#define a list
l=['Ruffy','Corey','Nancy','Jeffrey',' Kyle“, „Avery“, „Jason“, „Sunny“]

Es gibt zwei Möglichkeiten, die ersten drei Elemente zu erhalten. Der Code lautet wie folgt:

>> ;> l[ :3]
['Ruffy', 'Corey']
>>> l[0:3]
['Ruffy', 'Corey' , 'Nancy']

Mit anderen Worten, wenn es bei 0 beginnt, kann es weggelassen werden.

Der Code zum Abrufen des 2. bis 4. Elements lautet wie folgt:

>>> l[1:5]
['Corey', 'Nancy', ' Jeffrey', 'Kyle']

Der Code für die Fortsetzung vom vorletzten bis zum letzten lautet wie folgt:

>>> ]
[ 'Jason', 'Sunny']

Um den Inhalt der gesamten Liste zu erhalten, ohne die Länge der Liste zu kennen, lautet der Code wie folgt:

>>> l[:]
['Ruffy', 'Corey', 'Nancy', 'Jeffrey', 'Kyle', 'Avery', 'Jason', 'Sunny']

Jedes Mal in der gesamten Liste Nimm 1 von 2:

>>> l[::2]
['Ruffy', 'Nancy', 'Kyle' , 'Jason']

Nehmen Sie jeweils 1 von 2 der ersten 6 Elemente in der Liste:

>>> l[:5:2]
['Ruffy', 'Nancy', 'Kyle ']

Im tatsächlichen Bearbeitungscode können Sie hier häufig die Variable, die im Slicing-Vorgang auf die Liste zeigt, durch die Liste selbst ersetzen, wie unten gezeigt :

>> >
['Ruffy', 'Corey' , 'Nancy']

Sowohl Tupel als auch String können als Liste betrachtet werden, sodass die obige Syntax auch für sie verwendet werden kann.

Drei Listengenerationen

Listengenerationen (List CompRehensions) sind sehr leistungsstarke integrierte Generationen in Python zum Erstellen von Listen.

Im einfachsten Beispiel möchten wir eine Liste von 1 bis 10 erstellen. Wir können

list(range(1,11))

ganz einfach verwenden as Es ist mit nur einer Codezeile erledigt. Aber wie sieht es mit der Erstellung komplexerer Listen aus?

Wie erstelle ich eine Liste wie [1x1, 2x2, 3x3,...,10x10]? Natürlich kann dies mithilfe von Schleifen erreicht werden, aber die Verwendung der Listengenerierung erfordert nur die folgende Codezeile:

>>> 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Wenn Sie nur das Quadrat gerader Zahlen addieren, ist es nicht kompliziert , brauche nur Fügen Sie einfach die if-Beurteilungsbedingung nach der for-Schleife hinzu.

>>> [x*x für x im Bereich(1,11) wenn x % 2 == 0]
[4, 16, 36, 64, 100]

Sie können auch eine zweistufige Schleife verwenden,

>>> [x+y für x in 'ABC' für y in 'XYZ']
[' AX“, „AY“, „AZ“, „BX“, „BY“, „BZ“, „CX“, „CY“, „CZ“]

Ich habe so viele Listen geschrieben Generationsausdrücke, ich denke, jeder versteht den Ursprung dieser Grammatik. Tatsächlich geht es darum, die normale Syntax umzukehren und die innerste Berechnung an die erste Stelle zu setzen. Beispielsweise kann die letzte Listengenerierung mit der folgenden normalen Syntax geschrieben werden:

für x in 'ABC':
für y in 'XYZ':
print(x+y)

Vier Generatoren

Mit der Listengenerierung können wir direkt eine Liste erstellen, aber wenn wir das Speicherlimit berücksichtigen, können wir keine Liste mit einer großen Anzahl erstellen Elemente, was sollen wir zu diesem Zeitpunkt tun?

Python bietet einen Mechanismus namens Generator. Mit dem Generator können aufeinanderfolgende Elemente berechnet werden, sodass Sie nicht alle Elemente auf einmal erstellen müssen. Um einen Generator zu erstellen, gibt es zwei Methoden:

Die erste Methode: Ändern Sie [] im Listengenerierungsausdruck in (), um einen Generator zu erstellen.

Wie im folgenden Code gezeigt:

>>> g=(x für x im Bereich(10))
>> > ; print(next(g))
0

Um das erste Element des Generators zu erhalten, können Sie die nächste Funktion direkt auf g aufrufen. Natürlich können Sie im nächsten Schritt auch eine for-Schleife verwenden, um die vom gesamten Generator generierten Daten zu durchlaufen.

Die zweite Methode: Wenn die Berechnungsmethode zu kompliziert ist und die Listengenerierung nicht implementiert werden kann, kann sie über Funktionen implementiert werden. Im Vergleich zum Übergang von der Listengenerierung zum Generator ist der Übergang von der Funktion zum Generator ebenfalls sehr einfach. Sie müssen lediglich zuerst die Funktion schreiben und dann das Schlüsselwort yield an einer bestimmten Position hinzufügen.

Zum Beispiel lautet die Funktion, die eine Fibonacci-Sequenz generiert, wie folgt:

def fib(max):
n, a, b = 0, 0, 1
while n < max ; Um diese Funktion in einen Generator umzuwandeln, ersetzen Sie einfach die Codezeile print(b) durch yield b.

def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b

a, b = b, a + b

n = n + 1

return 'done'



Die Funktion, die das Schlüsselwort yield enthält, ist keine Funktion mehr, sondern ein Generator. Es ist zu beachten, dass sich der Ausführungsablauf des Generators von dem der Funktion unterscheidet. Er kehrt zurück, wenn er auf einen Yield trifft, und setzt die Ausführung beim nächsten Aufruf ab dem letzten zurückgegebenen Yield fort.



Fünf Iteratoren

Objekte, die direkt in for-Schleifen verwendet werden können, werden zusammenfassend als iterierbare Objekte bezeichnet: Mit isinstance() können Sie ermitteln, ob ein Objekt ein ist Iterierbares Objekt. Generatoren können nicht nur mit for-Schleifen, sondern auch mit next() durchlaufen werden. Wir rufen Objekte auf, die von der Funktion next() aufgerufen werden können, und geben kontinuierlich den nächsten Wert zurück, der gemeinsam als Iteratoren bezeichnet wird: Iterator.

Hier müssen wir zwischen einer Iterable- und einer Iterator-Liste unterscheiden, dict und str sind alle Iterable, aber kein Iterator (Sie können die Funktion iter() verwenden, um Iterable in Iterator umzuwandeln). Der Iterator kann ein unendlicher Datenstrom sein und die Länge der gesamten Sequenz kann nicht im Voraus bekannt sein. Dies sind Anforderungen, die Iterable nicht erfüllen kann.

Six Postscript

Was hier erwähnt wird, sind einige neue Programmierfunktionen, die ich nur in Python gelernt habe. Sollten Fehler auftreten, hinterlassen Sie bitte eine Nachricht! ! !

Das Obige ist der Inhalt der erweiterten Funktionen für das Einführungslernen von Python. Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn