Python Language de
Python Language de
#python
Inhaltsverzeichnis
Über 1
Bemerkungen 2
Versionen 3
Python 3.x 3
Python 2.x 3
Examples 4
Fertig machen 4
Andere Online-Shells 7
Benutzereingabe 13
IDLE - Python-GUI 14
Fehlerbehebung 15
Datentypen 15
Eingebaute Typen 15
Booleaner 16
Zahlen 16
Zeichenketten 17
Eingebaute Konstanten 18
Einrückung blockieren 25
Auflistungsarten 27
Hilfsprogramm 31
repr () 34
str () 34
Pip aufrüsten 36
Bemerkungen 40
h11 40
h12 40
h13 40
Examples 41
Syntax 45
Parameter 45
Bemerkungen 46
Examples 46
Grundlegende Verwendung 46
Unix 46
Windows 46
Unix 47
Windows 47
Examples 48
Examples 51
Einführung 53
Examples 53
Bemerkungen 54
Examples 54
Kapitel 8: ArcPy 58
Bemerkungen 58
Examples 58
Der Wert eines Feldes für alle Zeilen der Feature-Class in der File-Geodatabase mit dem Su 58
Einführung 59
Parameter 59
Examples 59
Hängen Sie mithilfe der append () -Methode einen beliebigen Wert an das Array an 61
Fügen Sie mit der Methode insert () einen Wert in ein Array ein 61
Fügen Sie mithilfe der fromlist () -Methode Elemente aus der Liste in das Array ein 61
Rufen Sie mit Hilfe der index () -Methode jedes Element über seinen Index ab 62
Überprüfen Sie die Anzahl der Vorkommen eines Elements mithilfe der Methode count () 63
Konvertieren Sie das Array mithilfe der tostring () -Methode in einen String 63
Konvertieren Sie das Array mithilfe der tolist () -Methode in eine Python-Liste mit densel 63
Hängen Sie einen String mit der fromstring () -Methode an das Char-Array an 63
Examples 64
Asynchrone Executoren 65
UVLoop verwenden 66
Synchronisationsprimitiv: Ereignis 66
Konzept 66
Beispiel 67
Syntax 70
Examples 70
Grundlegender Attributzugriff mit der Punktnotation 70
Examples 73
gewinnt 73
Welle 73
Einführung 75
Syntax 75
Examples 75
Ausnahmen aufwerfen 75
Ausnahmen fangen 75
Ausnahmehierarchie 77
Benutzereingabe 82
Wörterbücher 83
Sonst 83
Examples 85
Methodenaufruf 85
Itemgetter 85
Einführung 87
Examples 87
Einführung 93
Examples 93
Benutzerdefinierte Ausnahme 93
Examples 95
Syntax 97
Examples 97
Struktur verpacken 97
Einführung 99
Syntax 99
Examples 99
Bitweises AND 99
Bitweises ODER 99
Bitweises XOR (exklusives ODER) 100
Inplace-Operationen 103
Examples 104
und 104
oder 104
nicht 105
Kurzschlussauswertung 105
"und" und "oder" geben nicht garantiert einen Boolean zurück 106
Einführung 107
Examples 107
Ionenstärke 108
Einführung 110
Bemerkungen 110
Examples 110
Einführung 114
Examples 114
Codeblock-Namespaces 114
Einführung 115
Examples 115
Beispiel 115
Beispiel 116
Beispiel 116
IndentationError: Inkonsistente Verwendung von Tabulatoren und Leerzeichen beim Einzug 116
Beispiel 117
TypeErrors 117
Beispiel 117
TypeError: nicht unterstützte Operandentypen für [Operand]: '???' und '???' 118
Beispiel 118
Beispiel 119
Beispiel 119
AssertError 120
KeyboardInterrupt 121
ZeroDivisionError 121
Einführung 123
Syntax 123
Examples 123
Wahrheitswerte 127
Verwenden der Funktion cmp zum Abrufen des Vergleichsergebnisses zweier Objekte 127
Testen Sie, ob ein Objekt Keine ist, und weisen Sie es zu 129
Einführung 130
Syntax 130
Bemerkungen 130
Examples 130
Examples 132
Python 132
Ausgabedatei 132
Pandas benutzen 132
Einführung 133
Examples 133
Einführung 138
Syntax 138
Parameter 138
Bemerkungen 140
Examples 140
Examples 145
Bemerkungen 147
Examples 147
Währungsformatierung in US-Dollar mit dem Gebietsschema-Modul 147
Einführung 148
Syntax 148
Parameter 148
Examples 148
Einführung 151
Examples 151
Einführung 152
Syntax 152
Parameter 152
Bemerkungen 152
Examples 153
Dateimodi 153
Prüfen Sie, ob eine Datei oder ein Pfad vorhanden ist 157
Examples 161
Bemerkungen 163
Examples 163
SQLite 164
h21 165
Herstellen einer Verbindung zur Datenbank und Erstellen einer Tabelle 170
Oracle-Datenbank 171
Verbindung 173
Syntax 175
Parameter 175
Bemerkungen 175
Examples 176
Syntax 178
Parameter 178
Bemerkungen 178
Examples 179
Verwenden von Pickle zum Serialisieren und Deserialisieren eines Objekts 179
Examples 182
Matplotlib 182
Seaborn 183
MayaVI 186
Plotly 187
Bemerkungen 190
Examples 190
Analysieren einer Zeichenfolge mit einem kurzen Zeitzonennamen in ein Zeitzonenobjekt mit 192
Zeitzonenbasierte Datenzeiten erstellen 193
Examples 199
Examples 200
Remote-Debugger 202
Einführung 204
Syntax 204
Parameter 204
Examples 204
Dekorateurfunktion 204
Dekorationsmethoden 206
Warnung! 207
Dekorateurfunktionen 208
Syntax 211
Parameter 211
Bemerkungen 211
Examples 211
Examples 214
Kommandozeilenargumente 215
Einführung 218
Examples 218
Strategiemuster 218
Proxy 221
Kapitel 47: Deskriptor 224
Examples 224
Zwei-Wege-Konvertierungen 225
Examples 227
Syntax 230
Bemerkungen 230
Examples 232
Erstellen Sie eine neue Ausnahme, die abgefangen werden kann 232
Einführung 233
Bemerkungen 233
Examples 233
Situation 1 233
Situation 2 233
Einführung 236
Examples 236
Syntax 238
Parameter 238
Bemerkungen 238
Examples 239
Auswertung eines Strings, der ein Python-Literal enthält, mit ast.literal_eval 240
Ausführen von Code, der von nicht vertrauenswürdigem Benutzer mit exec, eval oder ast.lite 240
Bemerkungen 242
Examples 242
Nur einen Getter, Setter oder Deleter eines Eigenschaftsobjekts überschreiben 243
Einführung 246
Bemerkungen 246
Examples 246
Zusatz 246
Subtraktion 247
Multiplikation 247
Einteilung 248
Exponentierung 250
Spezialfunktionen 250
Logarithmen 251
Inplace-Operationen 251
Modul 252
Bemerkungen 254
Examples 254
So verwenden Sie Nachrichten von RabbitMQ 254
Examples 258
Syntax 260
Bemerkungen 260
Examples 260
Überschneidung 263
Union 263
Unterschied 263
Länge 265
Bemerkungen 266
Examples 266
Iteration 266
Einführung 267
Examples 267
Lesen und Schreiben von GNU-ZIP-Dateien 267
Einführung 268
Examples 268
Kapitel 61: Erstellen Sie eine virtuelle Umgebung mit Virtualenvwrapper in Windows 271
Examples 271
Examples 273
C ++ - Code 274
Kapitel 63: Externe Datendateien mit Pandas eingeben, unterteilen und ausgeben 276
Einführung 276
Examples 276
Grundlegender Code zum Importieren, Subset und Schreiben von externen Datendateien mit Pan 276
Syntax 278
Parameter 278
Bemerkungen 278
Examples 278
Einführung 282
Syntax 282
Examples 282
Routing-URLs 283
HTTP-Methoden 283
URL-Parameter 286
Datei-Uploads 287
Kekse 287
Examples 288
teilweise 288
total_ordering 288
reduzieren 289
lru_cache 289
cmp_to_key 290
Einführung 291
Examples 291
Lambda-Funktion 291
Kartenfunktion 291
Filterfunktion 291
Einführung 293
Syntax 293
Parameter 293
Bemerkungen 293
Examples 294
Warnung 298
Definieren einer Funktion mit einer beliebigen Anzahl von Argumenten 298
Warnung 300
Erläuterung 302
Lösung 302
Schließung 307
Rekursionslimit 308
Examples 313
Einführung 314
Syntax 314
Examples 314
Iteration 314
Generatorausdrücke 316
Einführung 316
Coroutinen 321
Rendite mit Rekursion: Alle Dateien in einem Verzeichnis werden rekursiv aufgelistet 321
Suchen 323
Einführung 325
Examples 325
PyDotPlus 325
Installation 325
PyGraphviz 326
Bemerkungen 328
Examples 328
Examples 330
Einführung 335
Syntax 335
Parameter 335
Bemerkungen 335
Examples 335
Beispiel 1 335
Beispiel 2 337
Beispiel 3 337
Beispiel 4 338
Einführung 340
Examples 340
Einführung 342
Examples 342
h14 353
Mehrfachrückgabe 356
Examples 358
Examples 360
PyQuery 361
Einführung 362
Examples 362
Einführung 363
Parameter 363
Bemerkungen 363
Examples 363
Syntax 365
Parameter 365
Bemerkungen 365
Examples 365
Grundschneiden 365
Slice-Zuordnung 368
Einführung 371
Bemerkungen 371
Examples 372
Kompatibilität 379
Benutzereingabe 385
Kompatibilität 389
Oktalkonstanten 389
Entfernte Operatoren <> und ``, auch mit! = Und repr () 390
Karte() 393
filter (), map () und zip () geben Iteratoren statt Sequenzen zurück 394
Datei I / O 397
Die Funktion round () ist die Funktion "break-break" und "return" 397
Examples 401
Examples 404
Syntax 408
Examples 408
Elemente aus einem iterierbaren Objekt mithilfe einer Funktion gruppieren 408
itertools.product 410
itertools.count 410
itertools.takewhile 411
itertools 412
itertools.repeat 414
Erhalten Sie eine kumulierte Summe von Zahlen in einem iterierbaren Element 414
itertools.permutations 415
Kapitel 86: JSON-Modul 416
Bemerkungen 416
Typen 416
Standardwerte 416
Deserialisierungsarten: 416
Serialisierungsarten: 416
Serialisierung: 417
De-Serialisierung: 417
Examples 418
Aufruf von "json.tool" von der Befehlszeile aus, um die JSON-Ausgabe zu drucken 420
Syntax 424
Parameter 424
Bemerkungen 424
Examples 424
Transponieren mit Map: Verwenden von "None" als Funktionsargument (nur Python 2.x) 427
Examples 431
Einführung 432
Examples 432
Einführung 435
Examples 435
Grundvererbung 435
Mehrfachvererbung 442
Klassenaufbau 447
Affen-Patching 447
Eigenschaften 451
Singleton-Klasse 453
Syntax 455
Bemerkungen 455
Examples 455
Syntaxkonventionen 457
Sphinx 458
Syntax 460
Examples 460
Einführung 462
Syntax 462
Bemerkungen 462
Examples 463
Bemerkungen 468
Examples 468
Code-Profiling 468
Kapitel 95: List Destructuring (auch bekannt als Ein- und Auspacken) 471
Examples 471
Zerstörungsauftrag 471
Zerstörung als Werte 471
Einführung 476
Syntax 476
Bemerkungen 476
Examples 476
Listenvergleich 489
Initialisieren einer Liste mit einer festen Anzahl von Elementen 490
Einführung 491
Syntax 491
Bemerkungen 491
Examples 491
Listenverständnisse 491
sonst 492
Generator-Ausdrücke 496
Anwendungsfälle 498
Vermeiden Sie sich wiederholende und teure Operationen mit Bedingungsklausel 499
Syntax 503
Bemerkungen 503
Examples 503
Einführung 506
Syntax 506
Bemerkungen 506
Examples 506
Iteriere zwei oder mehr Listen gleichzeitig innerhalb des Listenverständnisses 511
Kapitel 100: Mathematik-Modul 513
Examples 513
Warnung! 514
Warnung vor der Boden-, Abbruch- und Ganzzahlteilung negativer Zahlen 514
Logarithmen 514
Trigonometrie 515
Konstanten 516
Examples 524
Einführung 526
Bemerkungen 526
Examples 526
Metaklassensyntax 528
Syntax 532
Bemerkungen 532
Examples 532
Syntax 535
Bemerkungen 535
Examples 535
Mixin 535
Syntax 538
Bemerkungen 538
Examples 538
Python 3 545
Bemerkungen 546
Generationsmüllsammlung 546
Examples 548
Referenzzählung 548
Examples 555
Einführung 557
Examples 557
Examples 563
Unveränderliche 563
Übung 564
Mutables 564
Übung 565
Übung 566
Examples 568
Abfrage 2: Abrufen von Nachrichtenartikeln an einem bestimmten Datum nach Standort 569
Examples 571
IronPython 571
Jython 571
Verschlüsseln 572
Einführung 576
Examples 576
PyTesseract 576
PyOCR 576
Einführung 578
Syntax 578
Examples 578
Pfadkomponenten-Manipulation 579
Prüfen Sie, ob der angegebene Pfad ein Verzeichnis, eine Datei, ein symbolischer Link, ein 579
Examples 581
Jetzt werden wir die Pandas- transform verwenden, um die Anzahl der Bestellungen pro Kunde 581
Bemerkungen 584
Examples 584
Einführung 587
Syntax 587
Bemerkungen 587
Examples 588
Erstellen Sie eine Requirements.txt-Datei mit Paketen nur in der aktuellen virtualenv 590
Pakete installieren, die noch nicht auf dem Rohr als Räder montiert sind 591
Einführung 596
Examples 596
Erstellen mehrerer Plots in derselben Figur durch Überlagerung ähnlich wie bei MATLAB 598
Erstellen mehrerer Plots in derselben Figur mithilfe der Plotüberlagerung mit separaten Pl 599
Diagramme mit gemeinsamer X-Achse, aber unterschiedlicher Y-Achse: Verwendung von twinx () 600
Diagramme mit gemeinsamer Y-Achse und unterschiedlicher X-Achse mit twiny () 602
Examples 605
Mixins 605
Examples 608
Grundpolymorphismus 608
Examples 612
Fertig machen 612
Syntax 614
Examples 614
Examples 621
Examples 624
Einführung 628
Examples 628
Examples 633
Einführung 639
Bemerkungen 639
Examples 639
Einführung 642
Examples 642
Mausfunktionen 642
Tastaturfunktionen 642
Einführung 643
Syntax 643
Parameter 643
Examples 643
Channels 644
Einführung 646
Examples 646
Syntax 648
Bemerkungen 648
Examples 648
Vorteile: 649
Nachteile 650
Einführung 651
Bemerkungen 651
Examples 652
Einführung 655
Bemerkungen 655
Examples 655
Erste Schritte mit PLY 655
Nervenzusammenbruch 658
h22 659
h23 659
h24 660
h25 660
h26 660
h27 660
h28 661
h29 661
h210 661
h211 661
Nervenzusammenbruch 662
h212 664
Examples 665
Bemerkungen 667
Examples 667
Einführung 671
Examples 671
Antworten 673
Authentifizierung 674
Proxies 675
Syntax 677
Parameter 677
Bemerkungen 677
Examples 677
Prüfen Sie, welche seriellen Anschlüsse auf Ihrem Computer verfügbar sind 678
Einführung 679
Examples 679
Examples 680
OpenPyXL 680
Examples 686
Schauen Sie, bevor Sie mit einer prozessorintensiven Funktion springen 687
Wörterbuchschlüssel 687
Einführung 689
Examples 689
Datentyp Zahlen 689
String-Datentyp 689
Tupel-Datentyp 689
Wörterbuch-Datentyp 690
Examples 691
Notation 691
Deque-Operationen 692
Examples 695
Bemerkungen 700
Examples 700
Starten Sie Simple HttpServer in einem Thread und öffnen Sie den Browser 702
Bemerkungen 704
Examples 704
Einführung 704
Testen 706
Dokumentation 707
Readme 707
Lizenzierung 707
Syntax 709
Parameter 709
Examples 709
Python-Persistenz 709
Examples 711
Wörterbuch-Schlüsselinitialisierungen 711
Syntax 713
Parameter 713
Bemerkungen 713
Examples 713
Überblick 713
Erstes Wahrheits- / Falsches Element einer Sequenz (oder letztes Element, wenn es keine gi 715
Syntax 716
Examples 716
Suchen 718
Gruppierung 718
Ersetzen 720
Flaggen 723
Flaggen-Schlüsselwort 723
Inline-Flags 724
Bemerkungen 726
Examples 726
Einführung 735
Bemerkungen 735
Examples 735
collection.defaultdict 737
Collections.OrderedDict 738
collection.namedtuple 739
Collections.deque 740
Collections.ChainMap 741
Examples 743
Einführung 744
Syntax 744
Parameter 744
Examples 744
While-Schleife 752
Parameter 757
Bemerkungen 757
Examples 757
Parameter 761
Examples 761
SSH-Verbindung 761
Einführung 762
Syntax 762
Bemerkungen 762
Examples 762
Kapitel 156: Sockets und Nachrichtenverschlüsselung / Entschlüsselung zwischen Client und 768
Einführung 768
Bemerkungen 768
Examples 772
Examples 776
Holen Sie sich das Minimum oder Maximum von mehreren Werten 776
Extrahieren von N größten oder N kleinsten Elementen aus einer iterierbaren 781
Examples 783
Einführung 785
Syntax 785
Bemerkungen 785
Examples 785
Einführung 788
Parameter 788
Examples 788
Einführung 793
Syntax 793
Bemerkungen 793
Examples 793
Float-Formatierung 797
Syntax 803
Bemerkungen 804
Examples 804
str.casefold() 804
str.upper() 805
str.lower() 805
str.capitalize() 805
str.title() 805
str.swapcase() 805
Verwendung als str Klassenmethoden 805
Teilen Sie eine Zeichenfolge basierend auf einem Trennzeichen in eine Liste von Zeichenfol 806
Ersetzen Sie alle Vorkommen einer Teilzeichenfolge durch eine andere Teilzeichenfolge 807
str.isalpha 811
str.isalnum 813
str.isspace 813
Entfernen Sie unerwünschte führende / nachgestellte Zeichen aus einer Zeichenfolge 814
str.strip([chars]) 814
string.ascii_letters : 817
string.ascii_lowercase : 817
string.ascii_uppercase : 817
string.digits : 817
string.hexdigits : 817
string.octaldigits : 818
string.punctuation : 818
string.whitespace : 818
string.printable : 818
Syntax 822
Parameter 822
Examples 822
Bemerkungen 826
Examples 826
Den Index für Strings abrufen: str.index (), str.rindex () und str.find (), str.rfind () 826
Liste 827
Tupel 827
String 827
einstellen 827
Dikt 827
Abrufen der Indexliste und der Tupel: list.index (), tuple.index () 827
Einführung 832
Syntax 832
Bemerkungen 832
Examples 832
Kommandozeilenargumente 832
Skriptname 832
Standardfehlerstrom 833
Einführung 834
Syntax 834
Parameter 834
Bemerkungen 834
Examples 834
Parameter 836
Examples 836
Einführung 838
Bemerkungen 838
Examples 838
Geometrie-Manager 839
Platz 839
Pack 840
Gitter 840
Syntax 842
Bemerkungen 842
Examples 842
Tupel 844
Vergleich 846
Tupel-Länge 847
Tuple-Verkettung 848
Syntax 849
Bemerkungen 849
Examples 849
NamedTuple 852
Examples 853
Parameter 859
Examples 859
Examples 861
Kapitel 174: Umgang mit der Global Interpreter Lock (GIL) 862
Bemerkungen 862
Verweise: 863
Examples 863
Multiprocessing.Pool 864
David Beazleys Code, der Probleme beim Einfädeln von GIL zeigte 864
David Beazleys Code, der Probleme beim Einfädeln von GIL zeigte 865
Examples 867
Syntax 868
Parameter 868
Examples 868
Grundlagen 868
Codierung 870
Dekodierung 870
Moral 870
Datei I / O 870
Bemerkungen 872
Examples 872
Testen Sie Setup und Teardown innerhalb eines Tests. TestCase 874
Bemerkungen 881
Examples 881
Module 881
Pakete 881
Kapitel 179: Unveränderbare Datentypen (int, float, str, tuple und frozensets) 883
Examples 883
Die einzelnen Mitglieder von Tuple können nicht zugewiesen werden 883
Examples 884
Python 2 884
Python 3 884
Python 3 885
Syntax 887
Examples 887
del v 891
Syntax 896
Parameter 896
Examples 896
Gleich 897
Kettenvergleiche 898
Stil 898
Nebenwirkungen 898
Vergleich von `is` vs` == ` 899
Einführung 902
Examples 902
Examples 906
Examples 907
Examples 909
py2app 909
cx_Freeze 910
Examples 912
Einrückungsfehler 912
Einführung 915
Examples 915
Kapitel 189: Verwendung des "pip" -Moduls: PyPI Package Manager 916
Einführung 916
Syntax 916
Examples 917
Beispiel für die Verwendung von Befehlen 917
Einführung 919
Examples 919
Installation 919
Verwendungszweck 919
Einführung 921
Examples 921
Einführung 923
Bemerkungen 923
Examples 923
Installation 928
Verwendungszweck 928
Projektverzeichnisse 928
Festlegen einer bestimmten Python-Version zur Verwendung in Skripten unter Unix / Linux 929
Examples 933
Einführung 934
Bemerkungen 934
Examples 935
Einführung 936
Examples 936
Einführung 937
Syntax 937
Parameter 937
Bemerkungen 938
Examples 939
Bemerkungen 941
requests 941
requests-cache 941
scrapy 941
selenium 941
HTML-Analyse 941
BeautifulSoup 942
lxml 942
Examples 942
Ein einfaches Beispiel für die Verwendung von Anforderungen und lxml zum Abwischen einiger 942
Parameter 946
Examples 946
Examples 948
Syntax 952
Parameter 952
Bemerkungen 952
Examples 952
Diktierverständnis 955
Bemerkungen 963
Examples 963
Öffnen und Lesen großer XML-Dateien mithilfe von iterparse (inkrementelles Parsing) 964
Durchsuchen des XML mit XPath 965
Examples 967
Zählen der Vorkommen eines Elements in einer Sequenz: list.count () und tuple.count () 968
Bemerkungen 970
Anmerkungen 970
Examples 971
Motivation 971
Zusammenfassung 975
Syntax 977
Examples 977
Mischen() 977
Wahl() 977
Probe() 977
Erstellen von zufälligen Ganzzahlen und Floats: Randint, Randrange, Random und Uniform 978
randint () 978
randrange () 978
zufällig 979
Uniform 979
Examples 983
Einführung 986
Bemerkungen 986
Warnung: 986
Beschränkungen 986
Examples 987
Um die Schnittstelle zusammenzufassen (Schlüssel ist eine Zeichenfolge, Daten ist ein beli 987
Credits 991
Über
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: python-language
It is an unofficial and free Python Language ebook created for educational purposes. All the
content is extracted from Stack Overflow Documentation, which is written by many hardworking
individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official Python
Language.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to [email protected]
https://riptutorial.com/de/home 1
Kapitel 1: Erste Schritte mit Python Language
Bemerkungen
• Allzweck : Python kann in allen Kontexten und Umgebungen verwendet werden. Ein
Beispiel für eine nicht-allgemeinsprachliche Sprache ist PHP: PHP wurde speziell als
serverseitige Skriptsprache für die Webentwicklung entwickelt. Im Gegensatz dazu kann
Python für die serverseitige Web-Entwicklung verwendet werden, sondern auch Desktop -
Anwendungen für den Aufbau.
• Dynamisch geschrieben : Jede Variable in Python kann auf jeden Datentyp verweisen. Ein
einzelner Ausdruck kann zu unterschiedlichen Zeitpunkten Daten verschiedener Typen
auswerten. Daher ist folgender Code möglich:
if something:
x = 1
else:
x = 'this is a string'
print(x)
• Stark typisiert : Während der Programmausführung dürfen Sie nichts tun, was mit dem
Datentyp, mit dem Sie arbeiten, nicht kompatibel ist. Beispielsweise gibt es keine
versteckten Konvertierungen von Zeichenfolgen in Zahlen. Eine aus Ziffern bestehende
Zeichenfolge wird niemals als Zahl behandelt, wenn Sie sie nicht explizit konvertieren:
• Anfängerfreundlich :) : Pythons Syntax und Struktur sind sehr intuitiv. Es ist auf hohem
Niveau und enthält Konstrukte, die das Schreiben klarer Programme in kleinem und großem
Maßstab ermöglichen. Python unterstützt mehrere Programmierparadigmen, einschließlich
objektorientierter, imperativer und funktionaler Programmierung oder prozeduraler Stile. Es
verfügt über eine umfangreiche, umfassende Standardbibliothek und viele einfach zu
installierende Bibliotheken von Drittanbietern.
https://riptutorial.com/de/home 2
Unterschiede aufweisen. Python 2.x ist die Legacy-Version, obwohl sie immer noch weit verbreitet
ist. Python 3.x führt eine Reihe rückwärtskompatibler Änderungen durch, um die Duplizierung von
Funktionen zu reduzieren. In diesem Artikel erfahren Sie, wie Sie entscheiden können, welche
Version für Sie am besten geeignet ist .
Die offizielle Python-Dokumentation ist auch eine umfassende und nützliche Ressource, die
Dokumentation für alle Python-Versionen sowie Tutorials enthält, die Ihnen den Einstieg
erleichtern.
Es gibt eine offizielle Implementierung der von Python.org bereitgestellten Sprache, die im
Allgemeinen als CPython bezeichnet wird, und mehrere alternative Implementierungen der
Sprache auf anderen Laufzeitplattformen. Dazu gehören IronPython (auf dem .NET Python
ausgeführt wird), Jython (auf der Java-Laufzeitumgebung) und PyPy (das Python in einer
Teilmenge von sich selbst implementiert).
Versionen
Python 3.x
Ausführung Veröffentlichungsdatum
[3.7] 2017-05-08
3.6 2016-12-23
3,5 2015-09-13
3.4 2014-03-17
3.3 2012-09-29
3.2 2011-02-20
3.1 2009-06-26
3,0 2008-12-03
Python 2.x
Ausführung Veröffentlichungsdatum
2,7 2010-07-03
2.6 2008-10-02
2,5 2006-09-19
https://riptutorial.com/de/home 3
Ausführung Veröffentlichungsdatum
2.4 2004-11-30
2.3 2003-07-29
2.2 2001-12-21
2.1 2001-04-15
2,0 2000-10-16
Examples
Fertig machen
Python ist eine weit verbreitete Programmiersprache für allgemeine Zwecke, die von Guido van
Rossum entwickelt und erstmals 1991 veröffentlicht wurde. Python verfügt über ein dynamisches
Typsystem und eine automatische Speicherverwaltung und unterstützt mehrere
Programmierparadigmen, einschließlich objektorientierter, funktionale Programmierung und
prozedurale Stile. Es verfügt über eine große und umfassende Standardbibliothek.
• Python 3.x ist die aktuelle Version und wird derzeit weiterentwickelt.
• Python 2.x ist die ältere Version und wird bis 2020 nur Sicherheitsupdates erhalten. Es
werden keine neuen Funktionen implementiert. Beachten Sie, dass viele Projekte weiterhin
Python 2 verwenden, obwohl die Migration zu Python 3 einfacher wird.
Sie können beide Versionen von Python hier herunterladen und installieren. Siehe Python 3 vs.
Python 2 für einen Vergleich. Darüber hinaus bieten einige Drittanbieter neu verpackte Versionen
von Python an, die häufig verwendete Bibliotheken und andere Funktionen hinzufügen, um das
Einrichten allgemeiner Anwendungsfälle wie Mathematik, Datenanalyse oder wissenschaftliche
Verwendung zu erleichtern. Siehe die Liste auf der offiziellen Website .
$ python --version
Wenn Sie Python 3 installiert haben und dies Ihre Standardversion ist (weitere Informationen
finden Sie unter Fehlerbehebung ), sollten Sie etwa Folgendes sehen:
https://riptutorial.com/de/home 4
$ python --version
Python 3.6.0
Wenn Sie Python 2 installiert haben und dies Ihre Standardversion ist (weitere Informationen
finden Sie unter Fehlerbehebung ), sollten Sie etwa Folgendes sehen:
$ python --version
Python 2.7.13
Wenn Sie Python 3 installiert haben, aber $ python --version eine Python 2-Version ausgibt,
haben Sie auch Python 2 installiert. Dies ist häufig auf MacOS und vielen Linux-Distributionen der
Fall. Verwenden $ python3 stattdessen $ python3 , um den Python 3-Interpreter explizit zu
verwenden.
IDLE ist ein einfacher Editor für Python, der im Lieferumfang von Python enthalten ist.
>>>
https://riptutorial.com/de/home 5
Python 3.x 3.0
print('Hello, World')
Sie können die Python 3- print in Python 2 mit der folgenden import :
Python 2 verfügt über eine Reihe von Funktionalitäten, die optional mit dem Modul __future__ aus
Python 3 __future__ werden können, wie hier beschrieben .
Wenn Sie Python 2 verwenden, können Sie auch die folgende Zeile eingeben. Beachten Sie, dass
dies in Python 3 nicht gültig ist und daher nicht empfohlen wird, da es die Kompatibilität von
Cross-Versionscode reduziert.
Navigieren Sie in Ihrem Terminal zu dem Verzeichnis, in dem sich die Datei hello.py .
$ python hello.py
Hello, World
Sie können auch hello.py durch den Pfad zu Ihrer Datei hello.py . Wenn sich die Datei
beispielsweise in Ihrem Home-Verzeichnis befindet und Ihr Benutzer unter Linux "Benutzer" ist,
können Sie python /home/user/hello.py .
$ python
Python 2.7.12 (default, Jun 28 2016, 08:46:01)
[GCC 6.1.1 20160602] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'Hello, World'
Hello, World
>>>
Wenn Sie Python 3 von Ihrem Terminal aus ausführen python3 , führen Sie den Befehl python3 .
https://riptutorial.com/de/home 6
$ python3
Python 3.6.0 (default, Jan 13 2017, 00:00:00)
[GCC 6.1.1 20160602] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Hello, World')
Hello, World
>>>
Alternativ können Sie die interaktive Eingabeaufforderung starten und die Datei mit python -i
<file.py> .
$ python -i hello.py
"Hello World"
>>>
>>> exit()
oder
>>> quit()
Alternativ schließen Sie STRG + D die Shell und setzen Sie wieder in die Befehlszeile Ihres
Terminals.
Wenn Sie einen Befehl abbrechen möchten, befinden Sie sich mitten in der Eingabe und kehren
zu einer Eingabeaufforderung zum Reinigen zurück, während Sie sich in der Interpreter-Shell
befinden, und drücken Sie STRG + C.
Andere Online-Shells
Verschiedene Websites bieten Online-Zugriff auf Python-Shells.
• Führen Sie ein kleines Code-Snippet von einer Maschine aus, auf der Python-Installation
fehlt (Smartphones, Tablets usw.).
• Lernen oder lehren Sie grundlegende Python.
• Lösen Sie Online-Richterprobleme.
Beispiele:
https://riptutorial.com/de/home 7
• https://www.python.org/shell/ - Die auf der offiziellen Python-Website gehostete Online-
Python-Shell.
• https://ideone.com/ - Wird im Internet häufig verwendet, um das Verhalten von
Codeausschnitten darzustellen.
• https://repl.it/languages/python3 - Leistungsfähiger und einfacher Online-Compiler, IDE und
Interpreter. Code programmieren, kompilieren und Code in Python ausführen.
• https://www.tutorialspoint.com/execute_python_online.php - Eine voll funktionsfähige UNIX-
Shell und ein benutzerfreundlicher Projektexplorer.
• http://rextester.com/l/python3_online_compiler - Einfache und benutzerfreundliche IDE, die
die Ausführungszeit anzeigt
Dies kann hilfreich sein, wenn Sie die Ergebnisse von Skripts in der Shell miteinander verketten.
Shells - Bisher haben wir verschiedene Möglichkeiten zur Ausführung von Code mit Pythons
nativer interaktiver Shell beschrieben. Shells verwenden Pythons Interpretationskraft, um mit Code
in Echtzeit zu experimentieren. Zu den alternativen Shells gehören IDLE - eine vorgefertigte GUI,
IPython -, die für die Erweiterung der interaktiven Erfahrung usw. bekannt ist.
Programme - Zur Langzeitspeicherung können Sie Inhalte in .py-Dateien speichern und als
Skripte oder Programme mit externen Tools wie Shell, IDEs (wie PyCharm ), Jupyter-Notebooks
usw. bearbeiten / ausführen. Benutzer mit Zwischenspeicher können diese Tools verwenden. Die
hier besprochenen Methoden reichen jedoch für den Einstieg aus.
Mit dem Python-Tutor können Sie schrittweise durch den Python-Code navigieren, um zu
visualisieren, wie das Programm abläuft, und hilft Ihnen zu verstehen, wo Ihr Programm fehlerhaft
ist.
PEP8 definiert Richtlinien zum Formatieren von Python-Code. Das Formatieren von Code ist
wichtig, damit Sie schnell lesen können, was der Code bewirkt.
https://riptutorial.com/de/home 8
Variablen anlegen und Werte zuweisen
Um eine Variable in Python zu erstellen, müssen Sie nur den Variablennamen angeben und
dieser einen Wert zuweisen.
Python verwendet = , um Variablen Werte zuzuweisen. Es ist nicht erforderlich, eine Variable im
Voraus zu deklarieren (oder ihr einen Datentyp zuzuweisen). Wenn Sie einer Variablen einen Wert
zuweisen, deklariert und initialisiert sie die Variable mit diesem Wert. Es gibt keine Möglichkeit,
eine Variable zu deklarieren, ohne ihr einen Anfangswert zuzuweisen.
# Integer
a = 2
print(a)
# Output: 2
# Integer
b = 9223372036854775807
print(b)
# Output: 9223372036854775807
# Floating point
pi = 3.14
print(pi)
# Output: 3.14
# String
c = 'A'
print(c)
# Output: A
# String
name = 'John Doe'
print(name)
# Output: John Doe
# Boolean
q = True
print(q)
# Output: True
Die variable Zuweisung funktioniert von links nach rechts. Im Folgenden erhalten Sie einen
Syntaxfehler.
0 = x
=> Output: SyntaxError: can't assign to literal
Sie können die Schlüsselwörter von python nicht als gültigen Variablennamen verwenden. Sie
können die Liste der Keywords anzeigen:
https://riptutorial.com/de/home 9
import keyword
print(keyword.kwlist)
x = True # valid
_y = True # valid
2. Der Rest Ihres Variablennamens kann aus Buchstaben, Zahlen und Unterstrichen bestehen.
x = 9
y = X*5
=>NameError: name 'X' is not defined
Obwohl bei der Deklaration einer Variablen in Python kein Datentyp angegeben werden muss,
während der erforderliche Speicherbereich für die Variable reserviert wird, wählt der Python-
Interpreter automatisch den am besten geeigneten integrierten Typ dafür aus:
a = 2
print(type(a))
# Output: <type 'int'>
b = 9223372036854775807
print(type(b))
# Output: <type 'int'>
pi = 3.14
print(type(pi))
# Output: <type 'float'>
c = 'A'
print(type(c))
# Output: <type 'str'>
q = True
print(type(q))
# Output: <type 'bool'>
https://riptutorial.com/de/home 10
x = None
print(type(x))
# Output: <type 'NoneType'>
Jetzt kennen Sie die Grundlagen der Zuweisung. Lassen Sie uns diese Feinheiten über die
Zuweisung in Python aus dem Weg räumen.
Wenn Sie = für eine Zuweisungsoperation verwenden, ist links von = ein Name für das Objekt auf
der rechten Seite. Schließlich , was = tut , ist die Referenz des Objekts auf der linken Seite auf der
rechten Seite auf den Namen zuweisen.
Das ist:
a_name = an_object # "a_name" is now a name for the reference to the object "an_object"
Wenn wir also aus vielen Zuordnungsbeispielen oben pi = 3.14 auswählen, ist pi ein Name (nicht
der Name, da ein Objekt mehrere Namen haben kann) für das Objekt 3.14 . Wenn Sie unten
etwas nicht verstehen, kommen Sie zu diesem Punkt zurück und lesen Sie das noch einmal! Sie
können dies auch zum besseren Verständnis betrachten.
Sie können mehreren Variablen in einer Zeile mehrere Werte zuweisen. Beachten Sie, dass auf
der rechten und linken Seite des Operators = die gleiche Anzahl von Argumenten vorhanden sein
muss:
a, b, c = 1, 2, 3
print(a, b, c)
# Output: 1 2 3
a, b, c = 1, 2
=> Traceback (most recent call last):
=> File "name.py", line N, in <module>
=> a, b, c = 1, 2
=> ValueError: need more than 2 values to unpack
a, b = 1, 2, 3
=> Traceback (most recent call last):
=> File "name.py", line N, in <module>
=> a, b = 1, 2, 3
=> ValueError: too many values to unpack
Der Fehler im letzten Beispiel kann vermieden werden, indem der gleichen Anzahl von beliebigen
Variablen verbleibende Werte zugewiesen werden. Diese Dummy-Variable kann einen beliebigen
Namen haben, es ist jedoch üblich, den Unterstrich ( _ ) zum Zuweisen unerwünschter Werte zu
verwenden:
a, b, _ = 1, 2, 3
print(a, b)
# Output: 1, 2
Beachten Sie, dass die Anzahl von _ und die Anzahl der verbleibenden Werte gleich sein müssen.
https://riptutorial.com/de/home 11
Andernfalls wird "zu viele Werte zum Auspacken des Fehlers" wie oben ausgegeben:
a, b, _ = 1,2,3,4
=>Traceback (most recent call last):
=>File "name.py", line N, in <module>
=>a, b, _ = 1,2,3,4
=>ValueError: too many values to unpack (expected 3)
Sie können auch mehreren Variablen gleichzeitig einen einzelnen Wert zuweisen.
a = b = c = 1
print(a, b, c)
# Output: 1 1 1
Wenn Sie eine solche kaskadierende Zuweisung verwenden, ist es wichtig zu beachten, dass sich
alle drei Variablen a , b und c auf dasselbe Objekt im Speicher beziehen, ein int Objekt mit dem
Wert 1. Mit anderen Worten sind a , b und c drei verschiedene Namen auf dasselbe int Objekt
gegeben. Wenn Sie einem Objekt anschließend ein anderes Objekt zuweisen, werden die
anderen Objekte nicht wie erwartet geändert:
a = b = c = 1 # all three names a, b and c refer to same int object with value 1
print(a, b, c)
# Output: 1 1 1
b = 2 # b now refers to another int object, one with a value of 2
print(a, b, c)
# Output: 1 2 1 # so output is as expected.
Das Obige gilt auch für veränderliche Typen (wie list , dict usw.), ebenso wie für unveränderliche
Typen (wie int , string , tuple usw.):
x = y = [7, 8, 9] # x and y refer to the same list object just created, [7, 8, 9]
x = [13, 8, 9] # x now refers to a different list object just created, [13, 8, 9]
print(y) # y still refers to the list it was first assigned
# Output: [7, 8, 9]
So weit, ist es gut. Bei der Änderung des Objekts sieht die Sache etwas anders aus (im
Gegensatz zur Zuweisung des Namens zu einem anderen Objekt, wie oben beschrieben), wenn
die kaskadierende Zuordnung für veränderliche Typen verwendet wird. Schauen Sie unten, und
Sie werden es aus erster Hand sehen:
x = y = [7, 8, 9] # x and y are two different names for the same list object just created,
[7, 8, 9]
x[0] = 13 # we are updating the value of the list [7, 8, 9] through one of its
names, x in this case
print(y) # printing the value of the list using its other name
# Output: [13, 8, 9] # hence, naturally the change is reflected
Verschachtelte Listen sind auch in Python gültig. Das bedeutet, dass eine Liste eine andere Liste
als Element enthalten kann.
https://riptutorial.com/de/home 12
x = [1, 2, [3, 4, 5], 6, 7] # this is nested list
print x[2]
# Output: [3, 4, 5]
print x[2][1]
# Output: 4
Schließlich müssen Variablen in Python nicht den Typ beibehalten, für den sie zuerst definiert
wurden. Sie können einfach = , um einer Variablen einen neuen Wert zuzuweisen, selbst wenn
dieser Wert einen anderen Typ hat.
a = 2
print(a)
# Output: 2
a = "New value"
print(a)
# Output: New value
Wenn dies Sie stört, denken Sie darüber nach, dass das, was links von = ist, nur ein Name für ein
Objekt ist. Zuerst Sie den Anruf int mit dem Wert 2 Objekt a , dann ändern Sie Ihre Meinung und
entscheiden , den Namen zu geben , a zu einem string - Objekt, Wert ‚Neuer Wert‘ mit. Einfach,
richtig?
Benutzereingabe
Interaktive Eingabe
Um vom Benutzer Eingaben zu erhalten, verwenden Sie die input ( Hinweis : In Python 2.x heißt
die Funktion stattdessen raw_input , obwohl Python 2.x eine eigene input , die sich völlig
unterscheidet):
Die Funktion nimmt ein Zeichenfolgenargument an, das es als Eingabeaufforderung anzeigt und
eine Zeichenfolge zurückgibt. Der obige Code bietet eine Eingabeaufforderung, die auf die
Eingabe des Benutzers wartet.
https://riptutorial.com/de/home 13
name = input("What is your name? ")
# Out: What is your name?
Wenn der Benutzer „Bob“ und Hits eingeben, der Variable name wird mit dem String zugewiesen
werden "Bob" :
Beachten Sie, dass die input immer vom Typ str ist. str ist wichtig, wenn der Benutzer Zahlen
eingeben soll. Daher müssen Sie den str konvertieren, bevor Sie ihn als Zahl verwenden str :
x = input("Write a number:")
# Out: Write a number: 10
x / 2
# Out: TypeError: unsupported operand type(s) for /: 'str' and 'int'
float(x) / 2
# Out: 5.0
IDLE - Python-GUI
IDLE ist die integrierte Entwicklungs- und Lernumgebung von Python und ist eine Alternative zur
Befehlszeile. Wie der Name schon sagt, ist IDLE sehr nützlich, um neuen Code zu entwickeln
oder Python zu lernen. Unter Windows wird dieser mit dem Python-Interpreter ausgeliefert. Bei
anderen Betriebssystemen müssen Sie ihn möglicherweise über Ihren Paketmanager installieren.
Drücken Sie unter IDLE die Taste F5 oder run Python Shell , um einen Interpreter zu starten. Die
Verwendung von IDLE kann für neue Benutzer eine bessere Lernerfahrung sein, da Code beim
Schreiben des Benutzers interpretiert wird.
Beachten Sie, dass es viele Alternativen gibt, siehe zum Beispiel diese Diskussion oder diese
https://riptutorial.com/de/home 14
Liste .
Fehlerbehebung
• Windows
Unter Windows ist der Standardbefehl python . Wenn Sie den Fehler "'python' is not
recognized" , liegt die wahrscheinlichste Ursache darin, dass sich der Ort von Python nicht in
der Umgebungsvariablen PATH Ihres Systems befindet. Sie können auf diesen zugreifen,
indem Sie mit der rechten Maustaste auf 'Arbeitsplatz' klicken und 'Eigenschaften'
auswählen oder über 'Systemsteuerung' zu 'System' navigieren. Klicken Sie auf "Erweiterte
Systemeinstellungen" und dann auf "Umgebungsvariablen ...". Bearbeiten Sie die PATH
Variable, um das Verzeichnis Ihrer Python-Installation sowie den
C:\Python27;C:\Python27\Scripts (normalerweise C:\Python27;C:\Python27\Scripts )
C:\Python27;C:\Python27\Scripts . Dies erfordert Administratorrechte und erfordert
möglicherweise einen Neustart.
Wenn Sie mehrere Versionen von Python auf demselben Computer verwenden, können Sie
eine der python.exe Dateien umbenennen. Wenn Sie beispielsweise eine Version
python27.exe python27 , wird python27 zum Python-Befehl für diese Version.
Sie können auch den Python Launcher für Windows verwenden, der im
Installationsprogramm verfügbar ist und standardmäßig enthalten ist. Sie können die Version
von Python auswählen, indem Sie py -[xy] anstelle von python[xy] . Sie können die neueste
Version von Python 2 verwenden, indem Sie Skripts mit py -2 und die neueste Version von
Python 3 py -3 indem Sie Skripts mit py -3 .
In diesem Abschnitt wird davon ausgegangen, dass die Position der ausführbaren python
Datei der Umgebungsvariablen PATH hinzugefügt wurde.
Wenn Sie Debian / Ubuntu / MacOS verwenden, öffnen Sie das Terminal und geben Sie
python für Python 2.x oder python3 für Python 3.x ein.
• Arch Linux
Der Standard-Python für Arch Linux (und seine Nachkommen) ist Python 3. Verwenden Sie
daher python oder python3 für Python 3.x und python2 für Python 2.x.
• Andere Systeme
Python 3 ist manchmal an python statt an python3 gebunden. Um Python 2 auf diesen
Systemen, auf denen es installiert ist, zu verwenden, können Sie python2 .
Datentypen
https://riptutorial.com/de/home 15
Eingebaute Typen
Booleaner
bool: Ein boolescher Wert von " True oder " False . Logische Operationen wie and , or , not auf
booleans durchgeführt werden.
In Python 2.x und Python 3.x ist ein Boolean auch ein int . Der bool Typ ist eine Unterklasse des
int Typs, und True und False sind die einzigen Instanzen:
True + False == 1 # 1 + 0 == 1
True * True == 1 # 1 * 1 == 1
Zahlen
• int : Ganzzahl
a = 2
b = 100
c = 123456789
d = 38563846326424324
Hinweis: In älteren Versionen von Python war ein long Typ verfügbar, der sich von int . Die
beiden wurden vereinheitlicht.
• float: Fließkommazahl; Die Genauigkeit hängt von der Implementierung und der
Systemarchitektur ab. Bei CPython entspricht der float Datentyp einem C-Double.
a = 2.0
b = 100.e0
c = 123456789.e1
• complex
https://riptutorial.com/de/home 16
: Komplexe Zahlen
a = 2 + 1j
b = 100 + 10j
Die Operatoren < , <= , > und >= TypeError eine TypeError Exception aus, wenn ein Operand eine
komplexe Zahl ist.
Zeichenketten
Python 3.x 3.0
a = reversed('hello')
• tuple : Eine geordnete Sammlung von n Werten eines beliebigen Typs ( n >= 0 ).
a = (1, 2, 3)
b = ('a', 1, 'python', (1, 2))
b[2] = 'something else' # returns a TypeError
Unterstützt die Indizierung; unveränderlich; hashable, wenn alle seine Mitglieder hashable
sind
a = [1, 2, 3]
b = ['a', 1, 'python', (1, 2), [1, 2]]
b[2] = 'something else' # allowed
https://riptutorial.com/de/home 17
• set : Eine ungeordnete Sammlung eindeutiger Werte. Elemente müssen hashbar sein .
a = {1, 2, 'a'}
a = {1: 'one',
2: 'two'}
Ein Objekt ist hashbar, wenn es einen Hashwert hat, der sich während seiner
Lebensdauer niemals ändert (es benötigt eine __hash__() Methode) und kann mit
anderen Objekten verglichen werden (es benötigt eine __eq__() Methode). Hashfähige
Objekte, die Gleichheit vergleichen, müssen denselben Hashwert haben.
Eingebaute Konstanten
In Verbindung mit den integrierten Datentypen gibt es eine kleine Anzahl von eingebauten
Konstanten im integrierten Namespace:
a = None # No value will be assigned. Any valid datatype can be assigned later
None hat keine natürliche Reihenfolge. Die Verwendung von Sortiervergleichsoperatoren ( < , <= , >=
, > ) wird nicht mehr unterstützt und führt zu einem TypeError .
None ist immer kleiner als eine beliebige Zahl ( None < -32 zu True ausgewertet).
https://riptutorial.com/de/home 18
a = '123'
print(type(a))
# Out: <class 'str'>
b = 123
print(type(b))
# Out: <class 'int'>
In Bedingungsanweisungen ist es möglich, den Datentyp mit einer isinstance zu testen. Es wird
jedoch normalerweise nicht empfohlen, sich auf den Typ der Variablen zu verlassen.
i = 7
if isinstance(i, int):
i += 1
elif isinstance(i, str):
i = int(i)
i += 1
Informationen zu den Unterschieden zwischen type() und isinstance() Sie unter: Unterschiede
zwischen isinstance und type in Python
x = None
if x is None:
print('Not a surprise, I just defined x as None.')
Zum Beispiel ist '123' vom Typ str und kann mit int Funktion in eine Ganzzahl umgewandelt
werden.
a = '123'
b = int(a)
Die Konvertierung von einem Float-String wie '123.456' kann mit der float Funktion erfolgen.
a = '123.456'
b = float(a)
c = int(a) # ValueError: invalid literal for int() with base 10: '123.456'
d = int(b) # 123
a = 'hello'
list(a) # ['h', 'e', 'l', 'l', 'o']
set(a) # {'o', 'e', 'l', 'h'}
tuple(a) # ('h', 'e', 'l', 'l', 'o')
https://riptutorial.com/de/home 19
Expliziter Zeichenfolgentyp bei der Definition
von Literalen
Mit einem Buchstaben vor den Anführungszeichen können Sie feststellen, welche Art von
Zeichenfolge Sie definieren möchten.
def f(m):
m.append(3) # adds a number to the list. This is a mutation.
x = [1, 2]
f(x)
x == [1, 2] # False now, since an item was added to the list
Ein Objekt wird als unveränderlich bezeichnet, wenn es in keiner Weise geändert werden kann.
Zum Beispiel sind Ganzzahlen unveränderlich, da sie nicht geändert werden können:
def bar():
x = (1, 2)
g(x)
x == (1, 2) # Will always be True, since no function can change the object (1, 2)
Beachten Sie, dass Variablen selbst veränderbar sind, sodass wir die Variable x neu zuweisen
können. Dies ändert jedoch nicht das Objekt, auf das x zuvor gezeigt hat. Es wurde nur x auf ein
neues Objekt gesetzt.
Datentypen, deren Instanzen veränderlich sind, werden als veränderliche Datentypen bezeichnet
und für unveränderliche Objekte und Datentypen gleichermaßen.
https://riptutorial.com/de/home 20
Beispiele für unveränderliche Datentypen:
• bytearray
• list
• set
• dict
Ein Modul ist eine Datei, die Python-Definitionen und Anweisungen enthält. Funktion ist ein Stück
Code, der einige Logik ausführt.
>>> pow(2,3) #8
Um die eingebaute Funktion in Python zu überprüfen, können wir dir(). Wenn Sie ohne Argument
aufgerufen werden, geben Sie die Namen im aktuellen Bereich zurück. Andernfalls wird eine
alphabetische Liste von Namen zurückgegeben, die (einige) das Attribut des angegebenen
Objekts sowie die von ihm erreichbaren Attribute enthalten.
>>> dir(__builtins__)
[
'ArithmeticError',
'AssertionError',
'AttributeError',
'BaseException',
'BufferError',
'BytesWarning',
'DeprecationWarning',
'EOFError',
'Ellipsis',
'EnvironmentError',
'Exception',
'False',
'FloatingPointError',
'FutureWarning',
'GeneratorExit',
'IOError',
'ImportError',
'ImportWarning',
'IndentationError',
'IndexError',
'KeyError',
'KeyboardInterrupt',
'LookupError',
'MemoryError',
'NameError',
'None',
https://riptutorial.com/de/home 21
'NotImplemented',
'NotImplementedError',
'OSError',
'OverflowError',
'PendingDeprecationWarning',
'ReferenceError',
'RuntimeError',
'RuntimeWarning',
'StandardError',
'StopIteration',
'SyntaxError',
'SyntaxWarning',
'SystemError',
'SystemExit',
'TabError',
'True',
'TypeError',
'UnboundLocalError',
'UnicodeDecodeError',
'UnicodeEncodeError',
'UnicodeError',
'UnicodeTranslateError',
'UnicodeWarning',
'UserWarning',
'ValueError',
'Warning',
'ZeroDivisionError',
'__debug__',
'__doc__',
'__import__',
'__name__',
'__package__',
'abs',
'all',
'any',
'apply',
'basestring',
'bin',
'bool',
'buffer',
'bytearray',
'bytes',
'callable',
'chr',
'classmethod',
'cmp',
'coerce',
'compile',
'complex',
'copyright',
'credits',
'delattr',
'dict',
'dir',
'divmod',
'enumerate',
'eval',
'execfile',
'exit',
'file',
'filter',
https://riptutorial.com/de/home 22
'float',
'format',
'frozenset',
'getattr',
'globals',
'hasattr',
'hash',
'help',
'hex',
'id',
'input',
'int',
'intern',
'isinstance',
'issubclass',
'iter',
'len',
'license',
'list',
'locals',
'long',
'map',
'max',
'memoryview',
'min',
'next',
'object',
'oct',
'open',
'ord',
'pow',
'print',
'property',
'quit',
'range',
'raw_input',
'reduce',
'reload',
'repr',
'reversed',
'round',
'set',
'setattr',
'slice',
'sorted',
'staticmethod',
'str',
'sum',
'super',
'tuple',
'type',
'unichr',
'unicode',
'vars',
'xrange',
'zip'
]
Um die Funktionalität einer beliebigen Funktion kennen, können wir in Funktion nutzen gebaut
help .
https://riptutorial.com/de/home 23
>>> help(max)
Help on built-in function max in module __builtin__:
max(...)
max(iterable[, key=func]) -> value
max(a, b, c, ...[, key=func]) -> value
With a single iterable argument, return its largest item.
With two or more arguments, return the largest argument.
Um alle Funktionen in einem Modul zu kennen, können wir die Funktionsliste einer Variablen
zuweisen und dann die Variable drucken.
>>> math.__doc__
'This module is always available. It provides access to the\nmathematical
functions defined by the C standard.'
Neben Funktionen kann Dokumentation auch in Modulen bereitgestellt werden. Wenn Sie also
eine Datei namens helloWorld.py wie helloWorld.py :
def sayHello():
"""This is the function docstring."""
return 'Hello World'
• Für jeden benutzerdefinierten Typ können seine Attribute, die Attribute seiner Klasse und
https://riptutorial.com/de/home 24
rekursiv die Attribute der Basisklassen seiner Klasse mit dir () abgerufen werden.
Jeder Datentyp kann einfach mit einer eingebauten Funktion namens str in String konvertiert
werden. Diese Funktion wird standardmäßig aufgerufen, wenn ein Datentyp an den print
Einrückung blockieren
Python verwendet Einrückungen zum Definieren von Steuerungs- und Schleifenkonstrukten. Dies
trägt zur Lesbarkeit von Python bei, erfordert jedoch, dass der Programmierer der Verwendung
von Leerzeichen große Aufmerksamkeit widmet. Die Fehlkalibrierung des Editors kann daher zu
Code führen, der sich unerwartet verhält.
Zum Beispiel:
oder
Blöcke, die genau eine einzeilige Anweisung enthalten, können in dieselbe Zeile eingefügt
werden, obwohl dieses Formular im Allgemeinen nicht als guter Stil gilt:
if a > b: print(a)
else: print(b)
Der Versuch, dies mit mehr als einer einzelnen Anweisung zu tun, funktioniert nicht :
https://riptutorial.com/de/home 25
if x > y: y = x
print(y) # IndentationError: unexpected indent
Ein leerer Block verursacht einen IndentationError . Verwenden Sie pass (ein Befehl, der nichts
tut), wenn Sie einen Block ohne Inhalt haben:
def will_be_implemented_later():
pass
Die ausschließliche Verwendung von Registerkarten ist möglich, PEP 8 , der Style-Guide für
Python-Code, besagt, dass Leerzeichen bevorzugt werden.
In Python 3 ist das Mischen von Tabs und Leerzeichen für die Einrückung nicht zulässig. In
diesem Fall wird ein Fehler bei der Kompilierung generiert: Inconsistent use of tabs and spaces in
indentation und das Programm wird nicht ausgeführt.
Python 2 erlaubt das Mischen von Tabs und Leerzeichen beim Einrücken. Dies wird dringend
empfohlen. Das Tabulatorzeichen schließt den vorherigen Einzug mit einem Vielfachen von 8
Leerzeichen ab . Da Editoren üblicherweise so konfiguriert sind, dass Registerkarten als mehrere
von vier Leerzeichen angezeigt werden, kann dies zu geringfügigen Fehlern führen.
Wenn Sie den Python 2-Befehlszeileninterpreter mit der Option -t aufrufen, werden
Warnungen über Code ausgegeben, der Tabulatoren und Leerzeichen illegal mischt.
Bei Verwendung von -tt diese Warnungen zu Fehlern. Diese Optionen werden
dringend empfohlen!
Viele Editoren haben "Tabs to Spaces" -Konfiguration. Wenn Sie den Editor konfiguriert, sollte
man zwischen den Tab - Zeichen ( ‚\ t‘) und der Tab - Taste unterscheiden.
https://riptutorial.com/de/home 26
Python Quellcode mit einer Mischung aus tabs geschrieben und Räumen oder mit Nicht-Standard
- Zahl der Einrückung Räume kann Pep8-konforme Verwendung gemacht werden autopep8 .
(Eine weniger leistungsfähige Alternative ist bei den meisten Python-Installationen enthalten:
reindent.py. )
Auflistungsarten
Es gibt eine Reihe von Auflistungstypen in Python. Während Typen wie int und str einen
einzelnen Wert enthalten, enthalten Auflistungstypen mehrere Werte.
Listen
Der list ist wahrscheinlich der am häufigsten verwendete Auflistungstyp in Python. Trotz ihres
Namens ähnelt eine Liste eher einem Array in anderen Sprachen, meistens JavaScript. In Python
ist eine Liste lediglich eine geordnete Sammlung gültiger Python-Werte. Eine Liste kann erstellt
werden, indem Werte, die durch Kommas getrennt sind, in eckige Klammern gesetzt werden:
int_list = [1, 2, 3]
string_list = ['abc', 'defghi']
empty_list = []
Die Elemente einer Liste sind nicht auf einen einzelnen Datentyp beschränkt. Dies ist sinnvoll,
wenn Python eine dynamische Sprache ist:
Auf die Elemente einer Liste kann über einen Index oder eine numerische Darstellung ihrer
Position zugegriffen werden. Listen in Python sind nullindiziert, was bedeutet, dass das erste
Element in der Liste den Index 0 hat, das zweite Element den Index 1 und so weiter:
Indizes können auch negativ sein, dh ab dem Ende der Liste zählen ( -1 ist der Index des letzten
Elements). Verwenden Sie also die Liste aus dem obigen Beispiel:
print(names[-1]) # Eric
print(names[-4]) # Bob
Listen sind veränderbar, sodass Sie die Werte in einer Liste ändern können:
https://riptutorial.com/de/home 27
names[0] = 'Ann'
print(names)
# Outputs ['Ann', 'Bob', 'Craig', 'Diana', 'Eric']
Außerdem können Sie Elemente zu einer Liste hinzufügen und / oder daraus entfernen:
Objekt mit L.append(object) an das Ende der Liste L.append(object) , gibt None .
Fügen Sie ein neues Element zur Liste an einem bestimmten Index hinzu. L.insert(index, object)
names.insert(1, "Nikki")
print(names)
# Outputs ['Alice', 'Nikki', 'Bob', 'Craig', 'Diana', 'Eric', 'Sia']
Entfernen Sie das erste Vorkommen eines Werts mit L.remove(value) None
names.remove("Bob")
print(names) # Outputs ['Alice', 'Nikki', 'Craig', 'Diana', 'Eric', 'Sia']
Rufen Sie den Index in der Liste des ersten Elements ab, dessen Wert x ist. Wenn kein solcher
Artikel vorhanden ist, wird ein Fehler angezeigt.
name.index("Alice")
0
len(names)
6
a = [1, 1, 1, 2, 3, 4]
a.count(1)
3
a.reverse()
[4, 3, 2, 1, 1, 1]
# or
a[::-1]
[4, 3, 2, 1, 1, 1]
Artikel mit Index L.pop([index]) der letzte Artikel) mit L.pop([index]) und den Artikel zurückgeben
https://riptutorial.com/de/home 28
names.pop() # Outputs 'Sia'
Tuples
Ein tuple ähnelt einer Liste mit der Ausnahme, dass es eine feste Länge und unveränderlich ist.
Daher können die Werte im Tupel nicht geändert werden, und die Werte können nicht zum Tupel
hinzugefügt oder daraus entfernt werden. Tupel werden im Allgemeinen für kleine Sammlungen
von Werten verwendet, die nicht geändert werden müssen, z. B. eine IP-Adresse und einen Port.
Tupel werden mit Klammern anstelle von eckigen Klammern dargestellt:
Die gleichen Indexierungsregeln für Listen gelten auch für Tupel. Tupel können auch verschachtelt
sein und die Werte können alle gültigen gültigen Python-Werte sein.
Ein Tupel mit nur einem Member muss folgendermaßen definiert werden (beachten Sie das
Komma):
oder
Wörterbücher
Ein dictionary in Python ist eine Sammlung von Schlüssel-Wert-Paaren. Das Wörterbuch ist von
geschweiften Klammern umgeben. Jedes Paar wird durch ein Komma getrennt, und der Schlüssel
und der Wert werden durch einen Doppelpunkt getrennt. Hier ist ein Beispiel:
state_capitals = {
'Arkansas': 'Little Rock',
'Colorado': 'Denver',
'California': 'Sacramento',
'Georgia': 'Atlanta'
}
https://riptutorial.com/de/home 29
ca_capital = state_capitals['California']
Sie können auch alle Schlüssel in einem Wörterbuch abrufen und diese dann durchlaufen:
for k in state_capitals.keys():
print('{} is the capital of {}'.format(state_capitals[k], k))
Wörterbücher ähneln stark der JSON-Syntax. Das native json Modul in der Python-
Standardbibliothek kann zum Konvertieren zwischen JSON und Wörterbüchern verwendet
werden.
einstellen
Ein set ist eine Sammlung von Elementen ohne Wiederholungen und ohne Einfügereihenfolge,
aber sortierte Reihenfolge. Sie werden in Situationen verwendet, in denen es nur wichtig ist, dass
einige Dinge zusammengruppiert werden und nicht in welcher Reihenfolge. Bei großen
Datengruppen ist es viel schneller zu prüfen, ob ein Element in einer set ist oder nicht set als
dasselbe für eine list .
Das Definieren eines set ist dem Definieren eines dictionary sehr ähnlich:
Oder Sie können einen set mit einer vorhandenen list erstellen:
my_list = [1,2,3]
my_set = set(my_list)
if name in first_names:
print(name)
Sie können eine set genau wie eine Liste durchlaufen, aber denken Sie daran: Die Werte werden
in einer beliebigen, von der Implementierung definierten Reihenfolge angezeigt.
defaultdict
Ein defaultdict ist ein Wörterbuch mit einem Standardwert für Schlüssel, sodass auf Schlüssel, für
die kein expliziter Wert definiert wurde, fehlerfrei zugegriffen werden kann. defaultdict ist
besonders nützlich, wenn es sich bei den Werten im Wörterbuch um Sammlungen (Listen,
Diagramme usw.) handelt, die nicht jedes Mal initialisiert werden müssen, wenn ein neuer
Schlüssel verwendet wird.
Ein defaultdict niemals einen KeyError aus. Für einen nicht vorhandenen Schlüssel wird der
Standardwert zurückgegeben.
https://riptutorial.com/de/home 30
>>> state_capitals = {
'Arkansas': 'Little Rock',
'Colorado': 'Denver',
'California': 'Sacramento',
'Georgia': 'Atlanta'
}
Wenn wir versuchen, auf einen nicht vorhandenen Schlüssel zuzugreifen, gibt Python einen
Fehler wie folgt zurück
>>> state_capitals['Alabama']
Traceback (most recent call last):
KeyError: 'Alabama'
Wir haben hier einen Standardwert ( Boston ) festgelegt, falls der Schlüssel nicht vorhanden ist.
Füllen Sie nun das Diktat wie zuvor:
Wenn wir versuchen, mit einem nicht vorhandenen Schlüssel auf das Diktat zuzugreifen, gibt
Python den Standardwert zurück, z. B. Boston
>>> state_capitals['Alabama']
'Boston'
und gibt die erstellten Werte für einen vorhandenen Schlüssel wie ein normales dictionary
>>> state_capitals['Arkansas']
'Little Rock'
Hilfsprogramm
Python hat mehrere Funktionen, die in den Interpreter integriert sind. Wenn Sie Informationen zu
Schlüsselwörtern, integrierten Funktionen, Modulen oder Themen erhalten möchten, öffnen Sie
eine Python-Konsole und geben Sie Folgendes ein:
>>> help()
https://riptutorial.com/de/home 31
Sie erhalten Informationen, indem Sie die Schlüsselwörter direkt eingeben:
>>> help(help)
help> help
class _Helper(builtins.object)
| Define the builtin 'help'.
|
| This is a wrapper around pydoc.help that provides a helpful message
| when 'help' is typed at the Python interactive prompt.
|
| Calling help() at the Python prompt starts an interactive help session.
| Calling help(thing) prints help for the python object 'thing'.
|
| Methods defined here:
|
| __call__(self, *args, **kwds)
|
| __repr__(self)
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
help(pymysql.connections)
Sie können die Hilfe verwenden, um auf die Dokumentfolgen der verschiedenen importierten
Module zuzugreifen. Versuchen Sie beispielsweise Folgendes:
>>> help(math)
Nun erhalten Sie eine Liste der verfügbaren Methoden im Modul, jedoch erst, nachdem Sie es
importiert haben.
https://riptutorial.com/de/home 32
Schließen Sie den Helfer mit quit
Ein Modul ist eine importierbare Datei, die Definitionen und Anweisungen enthält.
Ein Modul kann durch Erstellen einer .py Datei erstellt werden.
# hello.py
def say_hello():
print("Hello!")
Funktionen in einem Modul können durch Importieren des Moduls verwendet werden.
Für von Ihnen erstellte Module müssen sich diese im selben Verzeichnis befinden wie die Datei, in
die Sie sie importieren. (Sie können sie jedoch auch mit den im Lieferumfang enthaltenen
Modulen im Python-Verzeichnis lib ablegen, sollten aber möglichst vermieden werden.)
$ python
>>> import hello
>>> hello.say_hello()
=> "Hello!"
# greet.py
import hello
hello.say_hello()
# greet.py
from hello import say_hello
say_hello()
# greet.py
import hello as ai
ai.say_hello()
# run_hello.py
if __name__ == '__main__':
from hello import say_hello
say_hello()
Starte es!
https://riptutorial.com/de/home 33
$ python run_hello.py
=> "Hello!"
Wenn sich das Modul in einem Verzeichnis befindet und von Python erkannt werden muss, sollte
das Verzeichnis eine Datei mit dem Namen __init__.py .
Es gibt zwei Funktionen, mit denen eine lesbare Darstellung eines Objekts erhalten werden kann.
repr(x)ruft x.__repr__() : eine Darstellung von x . eval konvertiert das Ergebnis dieser Funktion
normalerweise zurück in das ursprüngliche Objekt.
str(x)ruft x.__str__() : Eine vom Menschen lesbare Zeichenfolge, die das Objekt beschreibt. Dies
kann einige technische Details auslassen.
repr ()
Bei vielen Typen versucht diese Funktion, eine Zeichenfolge zurückzugeben, die ein Objekt mit
demselben Wert ergibt, wenn es an eval() . Ansonsten handelt es sich bei der Darstellung um
eine in spitze Klammern eingeschlossene Zeichenfolge, die den Namen des Objekttyps sowie
zusätzliche Informationen enthält. Dies beinhaltet häufig den Namen und die Adresse des Objekts.
str ()
Bei Strings wird der String selbst zurückgegeben. Der Unterschied zwischen diesem und
repr(object) besteht darin, dass str(object) nicht immer versucht, einen String zurückzugeben,
der für eval() zulässig ist. Vielmehr ist es das Ziel, eine druckbare oder "lesbare" Zeichenfolge
zurückzugeben. Wenn kein Argument angegeben ist, wird der leere String '' .
Beispiel 1:
s = """w'o"w"""
repr(s) # Output: '\'w\\\'o"w\''
str(s) # Output: 'w\'o"w'
eval(str(s)) == s # Gives a SyntaxError
eval(repr(s)) == s # Output: True
Beispiel 2
import datetime
today = datetime.datetime.now()
str(today) # Output: '2016-09-15 06:58:46.915000'
repr(today) # Output: 'datetime.datetime(2016, 9, 15, 6, 58, 46, 915000)'
Beim Schreiben einer Klasse können Sie diese Methoden überschreiben, um zu tun, was Sie
möchten:
https://riptutorial.com/de/home 34
class Represent(object):
def __repr__(self):
return "Represent(x={},y=\"{}\")".format(self.x, self.y)
def __str__(self):
return "Representing x as {} and y as {}".format(self.x, self.y)
r = Represent(1, "Hopper")
print(r) # prints __str__
print(r.__repr__) # prints __repr__: '<bound method Represent.__repr__ of
Represent(x=1,y="Hopper")>'
rep = r.__repr__() # sets the execution of __repr__ to a new variable
print(rep) # prints 'Represent(x=1,y="Hopper")'
r2 = eval(rep) # evaluates rep
print(r2) # prints __str__ from new object
print(r2 == r) # prints 'False' because they are different objects
pip ist dein Freund, wenn du ein Paket aus der Fülle von Auswahlmöglichkeiten im python
package index (PyPI) installieren musst. pip ist bereits installiert, wenn Sie Python 2> = 2.7.9 oder
Python 3> = 3.4 verwenden, das von python.org heruntergeladen wurde. Bei Computern mit Linux
oder einem anderen * nix mit einem systemeigenen Paketmanager muss pip häufig manuell
installiert werden.
Bei Instanzen, auf denen sowohl Python 2 als auch Python 3 installiert sind, bezieht sich pip
häufig auf Python 2 und pip3 auf Python 3. Bei der Verwendung von pip werden nur Pakete für
Python 2 installiert, und pip3 installiert nur Pakete für Python 3.
Das Installieren eines Pakets ist so einfach wie das Eintippen (in einer Terminal- /
Eingabeaufforderung, nicht im Python-Interpreter).
https://riptutorial.com/de/home 35
Dabei ist xxx die Versionsnummer des Pakets, das Sie installieren möchten.
Wenn sich Ihr Server hinter einem Proxy befindet, können Sie das Paket mit dem folgenden
Befehl installieren:
Das Aktualisieren aller veralteten Pakete ist keine Standardfunktion von pip .
Pip aufrüsten
Sie können Ihre vorhandene Pip-Installation mit den folgenden Befehlen aktualisieren
Möglicherweise müssen Sie sudo with pip auf einigen Linux-Systemen verwenden
• Unter Windows:
oder
Hinweis : Die folgenden Anweisungen werden für Python 2.7 geschrieben (sofern
nicht anders angegeben): Anweisungen für Python 3.x sind ähnlich.
https://riptutorial.com/de/home 36
WINDOWS
Laden Sie zunächst die neueste Version von Python 2.7 von der offiziellen Website (
https://www.python.org/downloads/) herunter. Die Version wird als MSI-Paket bereitgestellt. Um es
manuell zu installieren, doppelklicken Sie einfach auf die Datei.
C:\Python27\
Angenommen, Ihre Python-Installation befindet sich in C: \ Python27, und fügen Sie dies zu Ihrem
PFAD hinzu:
C:\Python27\;C:\Python27\Scripts\
python --version
So installieren und verwenden Sie Python 2.x und 3.x nebeneinander auf einem Windows-
Computer:
• Stellen Sie sicher, dass Python für alle Benutzer installiert ist.
• Optional: Fügen Sie Python zu PATH , damit Python 2.x von der Befehlszeile aus mit
python .
• Stellen Sie erneut sicher, dass Python für alle Benutzer installiert ist.
• Optional: Fügen Sie Python zu PATH , damit Python 3.x von der Befehlszeile aus mit
python . Dies kann die PATH Einstellungen von Python 2.x außer Kraft setzen.
Überprüfen Sie deshalb Ihren PATH und stellen Sie sicher, dass er nach Ihren
Präferenzen konfiguriert ist.
• Stellen Sie sicher, dass Sie den py launcher für alle Benutzer installieren.
Python 3 installiert das Python-Startprogramm, mit dem Python 2.x und Python 3.x austauschbar
über die Befehlszeile gestartet werden können:
P:\>py -3
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
C:\>py -2
https://riptutorial.com/de/home 37
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Um die entsprechende Version von pip für eine bestimmte Python-Version zu verwenden,
verwenden Sie:
C:\>py -3 -m pip -V
pip 9.0.1 from C:\Python36\lib\site-packages (python 3.6)
C:\>py -2 -m pip -V
pip 9.0.1 from C:\Python27\lib\site-packages (python 2.7)
LINUX
Die neuesten Versionen von CentOS, Fedora, Redhat Enterprise (RHEL) und Ubuntu werden mit
Python 2.7 geliefert.
Um Python 2.7 manuell unter Linux zu installieren, führen Sie im Terminal Folgendes aus:
Fügen Sie auch den Pfad des neuen Python in der Umgebungsvariable PATH hinzu. Wenn sich
neuer Python in /root/python-2.7.X führen Sie den export PATH = $PATH:/root/python-2.7.X
python --version
Wenn Sie Python 3.6 benötigen, können Sie es wie unten gezeigt von der Quelle installieren
(Ubuntu 16.10 und 17.04 haben die Version 3.6 im universellen Repository). Die folgenden
Schritte müssen für Ubuntu 16.04 und niedrigere Versionen befolgt werden:
Mac OS
Wir sprechen zwar davon, dass macOS mit Python 2.7.10 installiert ist, aber diese Version ist
https://riptutorial.com/de/home 38
veraltet und gegenüber dem regulären Python geringfügig geändert.
Die mit OS X gelieferte Version von Python eignet sich hervorragend zum Lernen,
nicht aber für die Entwicklung. Die mit OS X gelieferte Version ist möglicherweise nicht
mehr aktuell als die offizielle Python-Version, die als stabile Produktionsversion gilt. (
Quelle )
Homebrew installieren:
Verwenden Sie für Python 3.x stattdessen den Befehl brew install python3 .
https://riptutorial.com/de/home 39
Kapitel 2: * args und ** kwargs
Bemerkungen
Es gibt ein paar Dinge zu beachten:
1. Die Namen args und kwargs werden kwargs verwendet, sie sind nicht Teil der
Sprachspezifikation. Somit sind diese gleichwertig:
2. Sie dürfen nicht mehr als einen args oder mehr als einen kwargs Parameter haben (diese sind
jedoch nicht erforderlich)
3. Wenn auf *args ein Positionsargument folgt, handelt es sich nur um Argumente, die nur nach
Namen übergeben werden können. Ein einzelner Stern kann anstelle von *args , um Werte
als Schlüsselwortargumente zu erzwingen, ohne eine variadische Parameterliste
anzugeben. Nur-Parameterparameterlisten sind nur in Python 3 verfügbar.
https://riptutorial.com/de/home 40
print(a, b, x, y)
Examples
Verwenden von * args beim Schreiben von Funktionen
Sie können den Stern * beim Schreiben einer Funktion verwenden, um alle positionellen (dh
unbenannten) Argumente in einem Tupel zu sammeln:
Aufrufmethode:
print_args(1, "two", 3)
In diesem Aufruf wird farg wie immer zugewiesen, und die beiden anderen werden in der
Reihenfolge, in der sie empfangen wurden, dem Args-Tupel zugeführt.
Sie können eine Funktion definieren, die eine beliebige Anzahl von Schlüsselwort (benannten)
Argumenten verwendet, indem Sie den doppelten Stern ** vor einem Parameternamen
verwenden:
def print_kwargs(**kwargs):
print(kwargs)
Beim Aufruf der Methode erstellt Python ein Wörterbuch aller Schlüsselwortargumente und macht
es im Funktionskörper verfügbar:
print_kwargs(a="two", b=3)
# prints: "{a: "two", b=3}"
Beachten Sie, dass der ** kwargs-Parameter in der Funktionsdefinition immer der letzte
https://riptutorial.com/de/home 41
Parameter sein muss und nur mit den Argumenten übereinstimmt, die nach den vorherigen
übergeben wurden.
Innerhalb des Funktionskörpers wird kwargs wie ein Wörterbuch manipuliert. Um auf einzelne
Elemente in kwargs zuzugreifen, kwargs Sie diese wie bei einem normalen Wörterbuch:
def print_kwargs(**kwargs):
for key in kwargs:
print("key = {0}, value = {1}".format(key, kwargs[key]))
print_kwargs(a = "two", b = 1)
key = a, value = "two"
key = b, value = 1
Ein häufiger Anwendungsfall für *args in einer Funktionsdefinition ist das Delegieren der
Verarbeitung an eine umschlossene oder geerbte Funktion. Ein typisches Beispiel ist die __init__
Methode einer Klasse
class A(object):
def __init__(self, b, c):
self.y = b
self.z = c
class B(A):
def __init__(self, a, *args, **kwargs):
super(B, self).__init__(*args, **kwargs)
self.x = a
Hier wird der a wird der Parameter von der Kind - Klasse , nachdem alle anderen Argumente
verarbeitet (Lage- und Keyword) geleitet werden , auf - und verarbeitet - der Basisklasse.
Zum Beispiel:
b = B(1, 2, 3)
b.x # 1
b.y # 2
b.z # 3
Was hier passiert, ist, dass die Klasse B __init__ die Argumente 1, 2, 3 sieht. Es weiß, dass es
ein positionelles Argument ( a ) braucht, daher greift es das erste Argument, das in ( 1 ) übergeben
wurde, also im Bereich der Funktion a == 1 .
https://riptutorial.com/de/home 42
Als nächstes sieht es, dass es eine beliebige Anzahl von Positionsargumenten ( *args ) nehmen
muss, sodass es den Rest der übergebenen Positionsargumente ( 1, 2 ) übernimmt und in *args
stopft. Nun (im Umfang der Funktion) args == [2, 3] .
Dann ruft es die Funktion __init__ Klasse A mit *args . Python sieht das * vor args und "entpackt"
die Liste in Argumente. Wenn in diesem Beispiel die __init__ Funktion der Klasse B die __init__
Funktion der Klasse A __init__ , werden die Argumente 2, 3 (dh A(2, 3) ) übergeben.
Schließlich setzt es seine eigene x Eigenschaft auf das erste Positionsargument a , das gleich 1 .
Sie können ein Wörterbuch verwenden, um den Parametern der Funktion Werte zuzuweisen.
Verwenden Sie den Parameternamen als Schlüssel im Wörterbuch und den Wert dieser an jeden
Schlüssel gebundenen Argumente:
# Note that dictionaries are unordered, so we can switch arg2 and arg3. Only the names matter.
kwargs = {"arg3": 3, "arg2": "two"}
# Bind the first argument (ie. arg1) to 1, and use the kwargs dictionary to bind the others
test_var_args_call(1, **kwargs)
Die Verwendung des Operators * für ein Argument beim Aufruf einer Funktion hat den Effekt, dass
die Liste oder ein Tupel-Argument entpackt wird
a = [1,2]
b = tuple([3,4])
print_args(*a)
# 12
print_args(*b)
# 34
Beachten Sie, dass die Länge des mit Sternchen versehenen Arguments der Anzahl der
Argumente der Funktion entsprechen muss.
Ein übliches Python-Idiom besteht darin, den Entpackungsoperator * mit der zip Funktion zu
verwenden, um seine Auswirkungen umzukehren:
a = [1,3,5,7,9]
b = [2,4,6,8,10]
https://riptutorial.com/de/home 43
zipped = zip(a,b)
# [(1,2), (3,4), (5,6), (7,8), (9,10)]
zip(*zipped)
# (1,3,5,7,9), (2,4,6,8,10)
In Python 3 können Sie Funktionsargumente definieren, die auch ohne Standardwerte nur per
Schlüsselwort zugewiesen werden können. Dies erfolgt durch Verwendung von Stern *, um
zusätzliche Positionsparameter zu verwenden, ohne die Schlüsselwortparameter festzulegen. Alle
Argumente nach dem * sind Argumente, die nur aus einem Schlüsselwort bestehen. Beachten
Sie, dass Argumente, die nur aus Schlüsselwörtern bestehen, keinen Standardwert haben, beim
Aufruf der Funktion jedoch erforderlich sind.
foobar(**values) # "foobar"
def fun(**kwargs):
print kwargs.get('value', 0)
fun()
# print 0
fun(value=1)
# print 1
https://riptutorial.com/de/home 44
Kapitel 3: 2to3 Werkzeug
Syntax
• $ 2to3 [-options] Pfad / to / file.py
Parameter
Parameter Beschreibung
2to3 akzeptiert eine Liste von Dateien oder Verzeichnissen, die als
Dateiname /
Argument umgewandelt werden sollen. Die Verzeichnisse werden
Verzeichnisname
rekursiv für Python-Quellen durchlaufen.
-j PROZESSE, --
processes = Führen Sie 2to3 gleichzeitig aus
PROZESSE
-x NOFIX, --nofix =
Eine Transformation ausschließen
NOFIX
Ändern Sie die Grammatik so, dass print() als Funktion betrachtet
-p, --print-Funktion
wird
https://riptutorial.com/de/home 45
Parameter Beschreibung
Bemerkungen
Das 2to3-Tool ist ein Python-Programm, mit dem der in Python 2.x geschriebene Code in Python
3.x-Code konvertiert wird. Das Tool liest den Quellcode von Python 2.x und wendet eine Reihe
von Fixierern an, um diesen in gültigen Python 3.x-Code umzuwandeln.
Das 2to3-Tool ist in der Standardbibliothek als lib2to3 verfügbar. Es enthält einen umfangreichen
Satz Fixierer, der nahezu den gesamten Code verarbeiten kann. Da es sich bei lib2to3 um eine
generische Bibliothek handelt, können Sie Ihre eigenen Fixer für 2to3 schreiben.
Examples
Grundlegende Verwendung
Betrachten Sie den folgenden Python2.x-Code. Speichern Sie die Datei als example.py
def greet(name):
print "Hello, {0}!".format(name)
print "What's your name?"
name = raw_input()
greet(name)
In der obigen Datei befinden sich mehrere inkompatible Zeilen. Die Methode raw_input() wurde in
Python 3.x durch input() und print ist keine Anweisung mehr, sondern eine Funktion. Dieser
Code kann mit dem 2to3-Tool in Python 3.x-Code konvertiert werden.
Unix
$ 2to3 example.py
Windows
Wenn Sie den obigen Code ausführen, werden die Unterschiede zur ursprünglichen Quelldatei
ausgegeben (siehe unten).
https://riptutorial.com/de/home 46
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: Refactored example.py
--- example.py (original)
+++ example.py (refactored)
@@ -1,5 +1,5 @@
def greet(name):
- print "Hello, {0}!".format(name)
-print "What's your name?"
-name = raw_input()
+ print("Hello, {0}!".format(name))
+print("What's your name?")
+name = input()
greet(name)
RefactoringTool: Files that need to be modified:
RefactoringTool: example.py
Die Änderungen können mit der Markierung -w in die Quelldatei zurückgeschrieben werden. Eine
Sicherungskopie der Originaldatei namens example.py.bak wird erstellt, sofern das Flag -n nicht
angegeben ist.
Unix
$ 2to3 -w example.py
Windows
Jetzt wurde die Datei example.py von Python 2.x in Python 3.x-Code konvertiert.
def greet(name):
print("Hello, {0}!".format(name))
print("What's your name?")
name = input()
greet(name)
https://riptutorial.com/de/home 47
Kapitel 4: Abstrakte Basisklassen (abc)
Examples
Einstellen der ABCMeta-Metaklasse
Abstrakte Klassen sind Klassen, die vererbt werden sollen, vermeiden jedoch die Implementierung
bestimmter Methoden und hinterlassen nur Methodensignaturen, die von Unterklassen
implementiert werden müssen.
Abstrakte Klassen sind nützlich, um Klassenabstraktionen auf hoher Ebene zu definieren und
durchzusetzen, ähnlich dem Konzept von Schnittstellen in typisierten Sprachen, ohne dass eine
Methodenimplementierung erforderlich ist.
Ein konzeptioneller Ansatz zum Definieren einer abstrakten Klasse besteht darin, die
Klassenmethoden auszulagern und dann einen NotImplementedError auszulösen, wenn darauf
zugegriffen wird. Dadurch wird verhindert, dass untergeordnete Klassen auf übergeordnete
Methoden zugreifen, ohne sie vorher zu überschreiben. So wie:
class Fruit:
def check_ripeness(self):
raise NotImplementedError("check_ripeness method not implemented!")
class Apple(Fruit):
pass
a = Apple()
a.check_ripeness() # raises NotImplementedError
Das Erstellen einer abstrakten Klasse auf diese Weise verhindert die unzulässige Verwendung
von Methoden, die nicht überschrieben werden, und ermutigt sicherlich dazu, Methoden in
untergeordneten Klassen zu definieren, erzwingen jedoch keine Definition. Mit dem Modul abc
können wir verhindern, dass untergeordnete Klassen instanziiert werden, wenn sie die abstrakten
Klassenmethoden ihrer Eltern und Vorfahren nicht überschreiben:
class AbstractClass(object):
# the metaclass attribute must always be set as a class variable
__metaclass__ = ABCMeta
https://riptutorial.com/de/home 48
Es ist jetzt möglich, die Unterklasse einfach zu überschreiben und zu überschreiben:
class Subclass(AbstractClass):
def virtual_method_subclasses_must_define(self):
return
Abstrakte Basisklassen (ABCs) erzwingen, welche abgeleiteten Klassen bestimmte Methoden der
Basisklasse implementieren.
Um zu verstehen, wie das funktioniert und warum wir es verwenden sollten, betrachten wir ein
Beispiel, das Van Rossum gefallen würde. Nehmen wir an, wir haben eine Basisklasse
"MontyPython" mit zwei Methoden (joke & punchline), die von allen abgeleiteten Klassen
implementiert werden müssen.
class MontyPython:
def joke(self):
raise NotImplementedError()
def punchline(self):
raise NotImplementedError()
class ArgumentClinic(MontyPython):
def joke(self):
return "Hahahahahah"
Wenn wir ein Objekt instanziieren und zwei Methoden aufrufen, erhalten wir (wie erwartet) einen
Fehler mit der punchline() -Methode.
Dies ermöglicht es uns jedoch immer noch, ein Objekt der ArgumentClinic-Klasse zu instanziieren,
ohne einen Fehler zu erhalten. Tatsächlich erhalten wir keine Fehlermeldung, bis wir die
Punchline () suchen.
Dies wird durch die Verwendung des ABC-Moduls (Abstract Base Class) vermieden. Mal sehen,
wie das mit demselben Beispiel funktioniert:
class MontyPython(metaclass=ABCMeta):
@abstractmethod
def joke(self):
pass
@abstractmethod
def punchline(self):
pass
https://riptutorial.com/de/home 49
class ArgumentClinic(MontyPython):
def joke(self):
return "Hahahahahah"
Wenn wir dieses Mal versuchen, ein Objekt aus der unvollständigen Klasse zu instanziieren,
erhalten wir sofort einen TypeError!
>>> c = ArgumentClinic()
TypeError:
"Can't instantiate abstract class ArgumentClinic with abstract methods punchline"
In diesem Fall ist es einfach, die Klasse abzuschließen, um alle TypeErrors zu vermeiden:
class ArgumentClinic(MontyPython):
def joke(self):
return "Hahahahahah"
def punchline(self):
return "Send in the constable!"
https://riptutorial.com/de/home 50
Kapitel 5: Abstrakter Syntaxbaum
Examples
Analysieren Sie Funktionen in einem Python-Skript
Dieser analysiert ein Python-Skript und meldet für jede definierte Funktion die Zeilennummer, an
der die Funktion begann, wo die Signatur endet, wo der Docstring endet und wo die
Funktionsdefinition endet.
#!/usr/local/bin/python3
import ast
import sys
""" The data we collect. Each key is a function name; each value is a dict
with keys: firstline, sigend, docend, and lastline and values of line numbers
where that happens. """
functions = {}
def process(functions):
""" Handle the function data stored in functions. """
for funcname,data in functions.items():
print("function:",funcname)
print("\tstarts at line:",data['firstline'])
print("\tsignature ends at line:",data['sigend'])
if ( data['sigend'] < data['docend'] ):
print("\tdocstring ends at line:",data['docend'])
else:
print("\tno docstring")
print("\tfunction ends at line:",data['lastline'])
print()
class FuncLister(ast.NodeVisitor):
def visit_FunctionDef(self, node):
""" Recursively visit all functions, determining where each function
starts, where its signature ends, where the docstring ends, and where
the function ends. """
functions[node.name] = {'firstline':node.lineno}
sigend = max(node.lineno,lastline(node.args))
functions[node.name]['sigend'] = sigend
docstring = ast.get_docstring(node)
docstringlength = len(docstring.split('\n')) if docstring else -1
functions[node.name]['docend'] = sigend+docstringlength
functions[node.name]['lastline'] = lastline(node)
self.generic_visit(node)
def lastline(node):
""" Recursively find the last line of a node """
return max( [ node.lineno if hasattr(node,'lineno') else -1 , ]
+[lastline(child) for child in ast.iter_child_nodes(node)] )
def readin(pythonfilename):
""" Read the file name and store the function data into functions. """
with open(pythonfilename) as f:
code = f.read()
https://riptutorial.com/de/home 51
FuncLister().visit(ast.parse(code))
def analyze(file,process):
""" Read the file and process the function data. """
readin(file)
process(functions)
if __name__ == '__main__':
if len(sys.argv)>1:
for file in sys.argv[1:]:
analyze(file,process)
else:
analyze(sys.argv[0],process)
https://riptutorial.com/de/home 52
Kapitel 6: Ähnlichkeiten in der Syntax,
Bedeutungsunterschiede: Python vs.
JavaScript
Einführung
Es kommt manchmal vor, dass zwei Sprachen denselben oder einem ähnlichen Syntaxausdruck
unterschiedliche Bedeutungen zuweisen. Wenn beide Sprachen für einen Programmierer von
Interesse sind, hilft das Verdeutlichen dieser Verzweigungspunkte, die beiden Sprachen in ihren
Grundlagen und Feinheiten zu verstehen.
Examples
`in` mit Listen
2 in [2, 3]
In Python wird dies als True ausgewertet, in JavaScript jedoch als False. Dies liegt daran, dass in
Python in Checks geprüft wird, ob ein Wert in einer Liste enthalten ist, also 2 als erstes Element in
[2, 3] steht. In JavaScript in wird mit Objekten verwendet und überprüft, ob ein Objekt die
Eigenschaft mit dem durch den Wert angegebenen Namen enthält. JavaScript betrachtet also [2,
3] als Objekt oder eine Schlüsselwertzuordnung wie folgt:
{'0': 2, '1': 3}
und prüft, ob es eine Eigenschaft oder einen Schlüssel '2' enthält. Die Ganzzahl 2 wird stumm in
die Zeichenfolge '2' umgewandelt.
https://riptutorial.com/de/home 53
Kapitel 7: Alternativen zum Wechseln von
Anweisungen aus anderen Sprachen
Bemerkungen
Es gibt KEINE switch - Anweisung in Python als Sprache Design - Wahl. Es wurde ein PEP ( PEP-
3103 ) für das abgelehnte Thema erstellt.
In Python finden Sie eine Vielzahl von Rezepten, wie Sie Ihre eigenen Anweisungen zum
Wechseln ausführen können, und hier versuche ich, die sinnvollsten Optionen vorzuschlagen. Hier
sind ein paar Orte zu überprüfen:
• http://stackoverflow.com/questions/60208/replacements-for-switch-statement-in-python
• http://code.activestate.com/recipes/269708-some-python-style-switches/
• http://code.activestate.com/recipes/410692-readable-switch-construction-without-lambdas-
or-di/
• …
Examples
Verwenden Sie das, was die Sprache bietet: das if / else-Konstrukt.
Wenn Sie ein switch / case Konstrukt verwenden möchten, ist es am einfachsten, das gute alte if /
else Konstrukt zu verwenden:
def switch(value):
if value == 1:
return "one"
if value == 2:
return "two"
if value == 42:
return "the answer to the question about life, the universe and everything"
raise Exception("No case found!")
Es mag überflüssig und nicht immer hübsch aussehen, aber das ist bei weitem der effizienteste
Weg, und es erledigt die Aufgabe:
>>> switch(1)
one
>>> switch(2)
two
>>> switch(3)
…
Exception: No case found!
>>> switch(42)
the answer to the question about life the universe and everything
https://riptutorial.com/de/home 54
Benutze ein Diktat von Funktionen
switch = {
1: lambda: 'one',
2: lambda: 'two',
42: lambda: 'the answer of life the universe and everything',
}
def default_case():
raise Exception('No case found!')
und Sie verwenden die Get-Methode des Wörterbuchs, um die Funktion mit dem Wert zu
überprüfen und auszuführen. Wenn im Wörterbuch kein Wert vorhanden ist, wird default_case
ausgeführt.
Sie können auch etwas syntaktischen Zucker herstellen, damit der Schalter schöner aussieht:
def run_switch(value):
return switch.get(value, default_case)()
>>> run_switch(1)
one
Sie können eine Klasse verwenden, um die Switch- / Case-Struktur nachzuahmen. Im Folgenden
wird die Introspektion einer Klasse verwendet (mit der Funktion getattr() , die eine Zeichenfolge
in eine gebundene Methode einer Instanz auflöst), um den "case" getattr() aufzulösen.
Dann wird diese Introspecting-Methode auf die __call__ Methode gesetzt, um den Operator () zu
überladen.
class SwitchBase:
def switch(self, case):
m = getattr(self, 'case_{}'.format(case), None)
if not m:
return self.default
return m
https://riptutorial.com/de/home 55
__call__ = switch
Damit es noch schöner aussieht, subclassieren wir die SwitchBase Klasse (dies könnte jedoch in
einer Klasse geschehen), und definieren den gesamten case als Methoden:
class CustomSwitcher:
def case_1(self):
return 'one'
def case_2(self):
return 'two'
def case_42(self):
return 'the answer of life, the universe and everything!'
def default(self):
raise Exception('Not a case!')
Eine andere Art, die sehr lesbar und elegant ist, aber weit weniger effizient als eine if / else-
Struktur ist, besteht darin, eine Klasse wie folgt zu erstellen, die den zu vergleichenden Wert liest
und speichert, um sich im Kontext als aufrufbar darzustellen gibt true zurück, wenn er mit dem
gespeicherten Wert übereinstimmt:
class Switch:
def __init__(self, value):
self._val = value
def __enter__(self):
return self
def __exit__(self, type, value, traceback):
return False # Allows traceback to occur
def __call__(self, cond, *mconds):
return self._val in (cond,)+mconds
dann ist das Definieren der Fälle fast eine Übereinstimmung mit dem realen switch / case Konstrukt
(innerhalb einer Funktion sichtbar gemacht, um die Darstellung zu erleichtern):
def run_switch(value):
https://riptutorial.com/de/home 56
with Switch(value) as case:
if case(1):
return 'one'
if case(2):
return 'two'
if case(3):
return 'the answer to the question about life, the universe and everything'
# default
raise Exception('Not a case!')
>>> run_switch(1)
one
>>> run_switch(2)
two
>>> run_switch(3)
…
Exception: Not a case!
>>> run_switch(42)
the answer to the question about life, the universe and everything
Nota Bene :
• Diese Lösung wird als das auf pypi verfügbare Switch- Modul angeboten .
Alternativen zum Wechseln von Anweisungen aus anderen Sprachen online lesen:
https://riptutorial.com/de/python/topic/4268/alternativen-zum-wechseln-von-anweisungen-aus-
anderen-sprachen
https://riptutorial.com/de/home 57
Kapitel 8: ArcPy
Bemerkungen
In diesem Beispiel wird ein Suchcursor aus dem Data Access (da) -Modul von ArcPy verwendet.
Verwechseln Sie die arcpy.da.SearchCursor-Syntax nicht mit dem früheren und langsameren
arcpy.SearchCursor ().
Das Datenzugriffsmodul (arcpy.da) ist erst seit ArcGIS 10.1 for Desktop verfügbar.
Examples
Der Wert eines Feldes für alle Zeilen der Feature-Class in der File-
Geodatabase mit dem Suchcursor wird gedruckt
So drucken Sie ein Testfeld (TestField) aus einer Test-Feature-Class (TestFC) in einer Testdatei-
Geodatabase (Test.gdb) in einem temporären Ordner (C: \ Temp):
if(arcpy.Exists(gdb_name):
arcpy.Delete_management(gdb_name)
arcpy.CreateFileGDB_management(workspace, gdbName, "")
else:
arcpy.CreateFileGDB_management(workspace, gdbName, "")
return gdb_name
https://riptutorial.com/de/home 58
Kapitel 9: Arrays
Einführung
"Arrays" in Python sind nicht die Arrays in herkömmlichen Programmiersprachen wie C und Java,
sondern näher an Listen. Eine Liste kann eine Sammlung von homogenen oder heterogenen
Elementen sein und kann Ints, Strings oder andere Listen enthalten.
Parameter
Parameter Einzelheiten
h Stellt eine vorzeichenbehaftete Ganzzahl mit einer Größe von 2 Byte dar
H Stellt eine vorzeichenlose Ganzzahl mit einer Größe von 2 Byte dar
i Stellt eine vorzeichenbehaftete Ganzzahl mit einer Größe von 2 Byte dar
I Stellt eine vorzeichenlose Ganzzahl mit einer Größe von 2 Byte dar
l Stellt eine vorzeichenbehaftete Ganzzahl mit einer Größe von 4 Byte dar
Examples
Grundlegende Einführung in Arrays
Ein Array ist eine Datenstruktur, in der Werte desselben Datentyps gespeichert werden. In Python
ist dies der Hauptunterschied zwischen Arrays und Listen.
https://riptutorial.com/de/home 59
können Arrays in Python nur Werte enthalten, die demselben Datentyp entsprechen. In diesem
Tutorial werden wir die Python-Arrays anhand einiger Beispiele verstehen.
Wenn Sie mit Python noch nicht vertraut sind, beginnen Sie mit dem Python-Einführungsartikel.
Um Arrays in der Python-Sprache verwenden zu können, müssen Sie das Standard- array Modul
importieren. Das liegt daran, dass Array kein grundlegender Datentyp ist, wie Strings, Integer usw.
So können Sie array Module in Python importieren:
Nachdem Sie das array Modul importiert haben, können Sie ein Array deklarieren. So machen Sie
es:
In der obigen arrayIdentifierName ist arrayIdentifierName der Name des Arrays. Mit typecode
Python den Typ des Arrays kennen. Initializers sind die Werte, mit denen das Array initialisiert
wird.
Typcodes sind die Codes, mit denen der Typ der Arraywerte oder der Typ des Arrays definiert
wird. Die Tabelle im Parameterabschnitt zeigt die möglichen Werte, die Sie beim Deklarieren
eines Arrays und seines Typs verwenden können.
Hier ist ein reales Beispiel für die Deklaration von Python-Arrays:
my_array = array('i',[1,2,3,4])
In dem obigen Beispiel ist der verwendete Typcode i . Dieser Typcode repräsentiert eine
vorzeichenbehaftete Ganzzahl mit einer Größe von 2 Byte.
Auf einzelne Elemente kann über Indizes zugegriffen werden. Python-Arrays sind nullindiziert.
Hier ist ein Beispiel :
https://riptutorial.com/de/home 60
print(my_array[1])
# 2
print(my_array[2])
# 3
print(my_array[0])
# 1
Hängen Sie mithilfe der append () -Methode einen beliebigen Wert an das
Array an
Beachten Sie, dass der Wert 6 an die vorhandenen Array-Werte angehängt wurde.
Fügen Sie mit der Methode insert () einen Wert in ein Array ein
Wir können die Methode insert() verwenden, um einen Wert an einem beliebigen Index des
Arrays einzufügen. Hier ist ein Beispiel :
Im obigen Beispiel wurde der Wert 0 an Index 0 eingefügt. Beachten Sie, dass das erste
Argument der Index ist, während das zweite Argument der Wert ist.
Ein Python-Array kann mit der extend() -Methode um mehrere Werte extend() werden. Hier ist ein
Beispiel :
Wir sehen, dass das Array my_array mit Werten von my_extnd_array .
Fügen Sie mithilfe der fromlist () -Methode Elemente aus der Liste in das
Array ein
https://riptutorial.com/de/home 61
Wir sehen also, dass die Werte 11,12 und 13 von Liste c zu my_array .
Wir sehen, dass das Element 4 aus dem Array entfernt wurde.
pop entfernt das letzte Element aus dem Array. Hier ist ein Beispiel :
Wir sehen also, dass das letzte Element ( 5 ) aus dem Array herausgeplatzt wurde.
Rufen Sie mit Hilfe der index () -Methode jedes Element über seinen Index ab
index()gibt den ersten Index des übereinstimmenden Werts zurück. Denken Sie daran, dass
Arrays nullindiziert sind.
Beachten Sie in diesem zweiten Beispiel, dass nur ein Index zurückgegeben wurde, obwohl der
Wert zweimal im Array vorhanden ist
Die reverse() -Methode macht das, was der Name sagt - das Array wird umgekehrt. Hier ist ein
Beispiel :
Diese Methode stellt die Startadresse des Array-Puffers im Speicher und die Anzahl der Elemente
https://riptutorial.com/de/home 62
im Array bereit. Hier ist ein Beispiel:
Überprüfen Sie die Anzahl der Vorkommen eines Elements mithilfe der
Methode count ()
count() gibt die Anzahl zurück, zu der das Element in einem Array angezeigt wird. Im folgenden
Beispiel sehen wir, dass der Wert 3 zweimal vorkommt.
Konvertieren Sie das Array mithilfe der tostring () -Methode in einen String
Konvertieren Sie das Array mithilfe der tolist () -Methode in eine Python-Liste
mit denselben Elementen
Wenn Sie eine Python benötigen list Objekt, können Sie das verwenden tolist() Methode , um
Ihr Array in eine Liste zu konvertieren.
Hängen Sie einen String mit der fromstring () -Methode an das Char-Array an
https://riptutorial.com/de/home 63
Kapitel 10: Asyncio-Modul
Examples
Coroutine und Delegation Syntax
Vor der Veröffentlichung von Python 3.5+ verwendete das asyncio Modul Generatoren, um
asynchrone Aufrufe nachzuahmen, und verfügte daher über eine andere Syntax als das aktuelle
Python 3.5-Release.
In Python 3.5 wurden die async und await Schlüsselwörter eingeführt. Beachten Sie das Fehlen
von Klammern um den Aufruf von await func() .
import asyncio
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Vor Python 3.5 wurde der Dekorateur @asyncio.coroutine verwendet, um eine Coroutine zu
definieren. Die Ausbeute aus Ausdruck wurde für die Generatordelegierung verwendet. Beachten
Sie die Klammern um den yield from func() .
import asyncio
@asyncio.coroutine
def main():
print((yield from func()))
@asyncio.coroutine
def func():
# Do time intensive stuff..
return "Hello, world!"
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Hier ein Beispiel, das zeigt, wie zwei Funktionen asynchron ausgeführt werden können:
https://riptutorial.com/de/home 64
import asyncio
loop = asyncio.get_event_loop()
cors = asyncio.wait([cor1(), cor2()])
loop.run_until_complete(cors)
Asynchrone Executoren
import asyncio
from concurrent.futures import ThreadPoolExecutor
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))
Jede Ereignisschleife verfügt außerdem über einen "Standard" Executor Slot, der einem Executor
zugewiesen werden kann. Um einen Executor zuzuweisen und Aufgaben aus der Schleife zu
planen, verwenden Sie die Methode set_default_executor() .
import asyncio
from concurrent.futures import ThreadPoolExecutor
https://riptutorial.com/de/home 65
async def main(loop):
# NOTE: Using `None` as the first parameter designates the `default` Executor.
result = await loop.run_in_executor(None, func, "Hello,", " world!")
print(result)
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.set_default_executor(ThreadPoolExecutor())
loop.run_until_complete(main(loop))
Es gibt zwei Haupttypen von Executor in concurrent.futures , den ThreadPoolExecutor und den
ProcessPoolExecutor . Der ThreadPoolExecutor enthält einen Pool von Threads , die entweder
manuell auf eine bestimmte Anzahl von Fäden durch den Konstruktor oder Standardwerte für die
Anzahl der Kerne auf dem Maschinenzeit 5. eingestellt werden ThreadPoolExecutor verwendet den
Pool von Threads Aufgaben es auszuführen zugeordnet ist und Im Allgemeinen besser bei CPU-
gebundenen Operationen als bei E / A-gebundenen Operationen. ProcessPoolExecutor dies mit
dem ProcessPoolExecutor der für jede ihm zugewiesene Aufgabe einen neuen Prozess erzeugt. Der
ProcessPoolExecutor kann nur Aufgaben und Parameter übernehmen, die kommissionierbar sind.
Die häufigsten nicht auswählbaren Aufgaben sind die Methoden von Objekten. Wenn Sie die
Methode eines Objekts als Task in einem Executor ThreadPoolExecutor müssen, müssen Sie einen
ThreadPoolExecutor .
UVLoop verwenden
uvloop ist eine Implementierung für asyncio.AbstractEventLoop basierend auf libuv (Wird von nodejs
verwendet). Es ist mit 99% der asyncio Funktionen asyncio und ist viel schneller als das
herkömmliche asyncio.EventLoop . uvloop ist derzeit unter Windows nicht verfügbar. Installieren Sie
es mit pip install uvloop .
import asyncio
import uvloop
if __name__ == "__main__":
asyncio.set_event_loop(uvloop.new_event_loop())
# Do your stuff here ...
Sie können die Ereignisschleifen-Factory auch ändern, indem Sie die EventLoopPolicy auf die in
uvloop .
import asyncio
import uvloop
if __name__ == "__main__":
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
loop = asyncio.new_event_loop()
Synchronisationsprimitiv: Ereignis
https://riptutorial.com/de/home 66
Konzept
Verwenden Sie ein Event , um die Planung mehrerer Coroutinen zu synchronisieren .
Vereinfacht gesagt, ist ein Ereignis wie eine Waffe, die auf ein Rennen abgefeuert wird: Es lässt
die Läufer die Startblöcke verlassen.
Beispiel
import asyncio
# event consumers
async def consumer_a(event):
consumer_name = 'Consumer A'
print('{} waiting'.format(consumer_name))
await event.wait()
print('{} triggered'.format(consumer_name))
# event
event = asyncio.Event()
# event loop
event_loop = asyncio.get_event_loop()
event_loop.call_later(0.1, functools.partial(trigger, event)) # trigger event in 0.1 sec
# complete main_future
done, pending = event_loop.run_until_complete(main_future)
Ausgabe:
Verbraucher B wartet
Verbraucher Ein Warten
EVENT SET
Verbraucher B ausgelöst
Consumer A ausgelöst
https://riptutorial.com/de/home 67
Hier asyncio wir mit asyncio einen einfachen Echo- asyncio . Wir definieren Coroutinen für die
Verbindung zu einem Server und zum Senden / Empfangen von Nachrichten. Die Communcations
des websocket werden in einem laufen main Koroutine, die durch eine Ereignisschleife ausgeführt
wird. Dieses Beispiel wurde aus einem früheren Beitrag geändert.
import asyncio
import aiohttp
if __name__ == '__main__':
# The main loop
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Das häufigste Missverständnis über asnycio besteht asnycio darin, dass Sie alle Aufgaben parallel
ausführen können, indem Sie die GIL (globale Interpretersperre) umgehen und parallel dazu
blockierende Jobs (in separaten Threads) ausführen. es tut nicht
asyncio (und Bibliotheken, die mit asyncio ) bauen auf Coroutines auf: Funktionen, die
(gemeinsam) den Steuerungsfluss an die aufrufende Funktion zurückgeben. Beachten Sie
asyncio.sleep in den obigen Beispielen. Dies ist ein Beispiel für eine nicht blockierende Coroutine,
die 'im Hintergrund' wartet und den Steuerungsfluss an die aufrufende Funktion zurückgibt (wenn
mit await aufgerufen). time.sleep ist ein Beispiel für eine time.sleep . Der Ablauf des Programms
wird dort einfach time.sleep und erst nach time.sleep .
Ein reales Beispiel ist die requests die (vorerst) nur aus Sperrfunktionen besteht. Es gibt keine
Parallelität, wenn Sie eine seiner Funktionen innerhalb von asyncio . aiohttp dagegen wurde für
asyncio . Seine Coroutinen werden gleichzeitig laufen.
• Wenn Sie langlaufende CPU-gebundene Aufgaben haben, die Sie parallel asyncio ist asyncio
nichts für Sie. dazu benötigen Sie threads oder multiprocessing .
• wenn Sie IO-gebundene Arbeitsplätze ausgeführt wird , können Sie sie gleichzeitig mit
https://riptutorial.com/de/home 68
laufen asyncio .
https://riptutorial.com/de/home 69
Kapitel 11: Attribut-Zugriff
Syntax
• x.title # Accesses the title attribute using the dot notation
• x.title = "Hello World" # Sets the property of the title attribute using the dot notation
• @property # Used as a decorator before the getter method for properties
• @title.setter # Used as a decorator before the setter method for properties
Examples
Grundlegender Attributzugriff mit der Punktnotation
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
In Python können Sie das Attribut Titel der Klasse Zugriff auf die Punktnotation verwendet.
>>> book1.title
'P.G. Wodehouse'
Wenn ein Attribut nicht vorhanden ist, gibt Python einen Fehler aus:
>>> book1.series
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Book' object has no attribute 'series'
Für die Datenkapselung möchten Sie manchmal ein Attribut haben, dessen Wert von anderen
Attributen stammt oder generell, welcher Wert momentan berechnet werden soll. Die
Standardmethode, um mit dieser Situation umzugehen, ist das Erstellen einer Methode, Getter
oder Setter genannt.
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
Im obigen Beispiel ist es leicht zu sehen, was passiert, wenn wir ein neues Buch erstellen, das
einen Titel und einen Autor enthält. Wenn alle Bücher, die wir unserer Bibliothek hinzufügen, über
https://riptutorial.com/de/home 70
Autoren und Titel verfügen, können wir die Getter und Setter überspringen und die Punktnotation
verwenden. Angenommen, wir haben einige Bücher, die keinen Autor haben, und wir möchten
den Autor auf "Unbekannt" setzen. Oder wenn sie mehrere Autoren haben und wir planen, eine
Liste der Autoren zurückzugeben.
In diesem Fall können wir einen Getter und einen Setter für das Author- Attribut erstellen.
class P:
def __init__(self,title,author):
self.title = title
self.setAuthor(author)
def get_author(self):
return self.author
Ein Grund ist, dass es einen Haken gibt: Nehmen wir an, wir haben unsere Klasse mit dem
Attribut public und ohne Methoden entworfen. Die Leute haben es schon oft benutzt und Code wie
folgt geschrieben:
Jetzt haben wir ein Problem. Weil Autor kein Attribut ist! Python bietet eine Lösung für dieses
Problem, die als Eigenschaften bezeichnet wird. Eine Methode zum Abrufen von Eigenschaften
wird mit der @ -Eigenschaft vor dem Header versehen. Die Methode, die wir als Setter verwenden
möchten, ist mit @ attributeName.setter davor versehen.
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
@property
def author(self):
return self.__author
@author.setter
def author(self, author):
if not author:
self.author = "Unknown"
else:
self.author = author
Beachten Sie, dass in Python normalerweise nicht mehrere Methoden mit demselben Namen und
https://riptutorial.com/de/home 71
einer unterschiedlichen Anzahl von Parametern vorhanden sind. In diesem Fall erlaubt Python
dies jedoch aufgrund der verwendeten Dekorateure.
https://riptutorial.com/de/home 72
Kapitel 12: Audio
Examples
Audio mit Pyglet
import pyglet
audio = pyglet.media.load("audio.wav")
audio.play()
gewinnt
• Windows-Umgebung
import winsound
winsound.PlaySound("path_to_wav_file.wav", winsound.SND_FILENAME)
Welle
• Unterstützt Mono / Stereo
• Unterstützt keine Komprimierung / Dekomprimierung
import wave
with wave.open("path_to_wav_file.wav", "rb") as wav_file: # Open WAV file in read-only
mode.
# Get basic information.
n_channels = wav_file.getnchannels() # Number of channels. (1=Mono, 2=Stereo).
sample_width = wav_file.getsampwidth() # Sample width in bytes.
framerate = wav_file.getframerate() # Frame rate.
n_frames = wav_file.getnframes() # Number of frames.
comp_type = wav_file.getcomptype() # Compression type (only supports "NONE").
comp_name = wav_file.getcompname() # Compression name.
https://riptutorial.com/de/home 73
Konvertieren Sie eine beliebige Sounddatei mit Python und ffmpeg
ok = check_call(['ffmpeg','-i','input.mp3','output.wav'])
if ok:
with open('output.wav', 'rb') as f:
wav_file = f.read()
Hinweis:
• http://superuser.com/questions/507386/why-would-i-choose-libav-over-ffmpeg-or-is-there-
ever-unterschied
• Was sind die Unterschiede und Ähnlichkeiten zwischen ffmpeg, libav und avconv?
Windows bietet eine explizite Schnittstelle, über die Sie mit dem Modul winsound rohe Pieptöne bei
einer bestimmten Frequenz und Dauer winsound können.
import winsound
freq = 2500 # Set frequency To 2500 Hertz
dur = 1000 # Set duration To 1000 ms == 1 second
winsound.Beep(freq, dur)
https://riptutorial.com/de/home 74
Kapitel 13: Ausnahmen
Einführung
Fehler, die während der Ausführung erkannt werden, werden als Ausnahmen bezeichnet und sind
nicht unbedingt tödlich. Die meisten Ausnahmen werden nicht von Programmen behandelt. Es ist
möglich, Programme zu schreiben, die ausgewählte Ausnahmen behandeln. Es gibt bestimmte
Funktionen in Python, um Ausnahmen und Ausnahmelogik zu behandeln. Außerdem haben
Ausnahmen eine reichhaltige BaseException , die alle vom BaseException Typ erben.
Syntax
• Ausnahme auslösen
• # erhöhen eine Ausnahme, die bereits ausgelöst wurde
• Ausnahme von Ursache auslösen # Python 3 - Ausnahmeursache festlegen
• Ausnahme von None auslösen # Python 3 - unterdrückt den gesamten Ausnahmekontext
• Versuchen:
• außer [Ausnahmetypen] [ als Bezeichner ] :
• sonst:
• endlich:
Examples
Ausnahmen aufwerfen
Wenn Ihr Code auf eine Bedingung stößt, mit der er nicht umgehen kann, beispielsweise ein
falscher Parameter, sollte die entsprechende Ausnahme ausgelöst werden.
def even_the_odds(odds):
if odds % 2 != 1:
raise ValueError("Did not get an odd number")
return odds + 1
Ausnahmen fangen
Verwenden Sie try...except: um Ausnahmen abzufangen. Sie sollten so genau wie möglich eine
Ausnahme angeben:
try:
x = 5 / 0
except ZeroDivisionError as e:
# `e` is the exception object
print("Got a divide by zero! The exception was:", e)
# handle exceptional case
x = 0
https://riptutorial.com/de/home 75
finally:
print "The END"
# it runs no matter what execute.
>>> ZeroDivisionError.__bases__
(<class 'ArithmeticError'>,)
try:
5 / 0
except ArithmeticError:
print("Got arithmetic error")
Manchmal möchten Sie möglicherweise, dass unabhängig von der aufgetretenen Ausnahme
etwas geschieht, beispielsweise wenn Sie einige Ressourcen bereinigen müssen.
Der finally Block einer try Klausel wird unabhängig davon ausgeführt, ob Ausnahmen ausgelöst
wurden.
resource = allocate_some_expensive_resource()
try:
do_stuff(resource)
except SomeException as e:
log_error(e)
raise # re-raise the error
finally:
free_expensive_resource(resource)
Dieses Muster wird mit Kontextmanagern (mit der Anweisung with ) oft besser behandelt.
Verwenden Sie in diesem Fall einfach die raise Anweisung ohne Parameter.
try:
5 / 0
except ZeroDivisionError:
print("Got an error")
raise
https://riptutorial.com/de/home 76
Beachten Sie jedoch, dass jemand weiter oben im Aufrufer-Stack die Ausnahme noch fangen und
irgendwie damit umgehen kann. Die fertige Ausgabe kann in diesem Fall ein Ärgernis sein, da
dies auf jeden Fall passieren wird (gefangen oder nicht gefangen). Daher empfiehlt es sich, eine
andere Ausnahme auszulösen, die Ihren Kommentar zur Situation sowie die ursprüngliche
Ausnahme enthält:
try:
5 / 0
except ZeroDivisionError as e:
raise ZeroDivisionError("Got an error", e)
Dies hat jedoch den Nachteil, dass die Ausnahmespur auf genau diese raise reduziert wird raise
während die raise ohne Argument die ursprüngliche Ausnahmespur beibehält.
In Python 3 können Sie den ursprünglichen Stapel beibehalten, indem Sie die raise - from - Syntax
verwenden:
Bei der Behandlung einer Ausnahme können Sie eine weitere Ausnahme auslösen. Wenn Sie
IOError beim Lesen aus einer Datei einen IOError , möchten Sie möglicherweise einen
anwendungsspezifischen Fehler IOError , der stattdessen den Benutzern Ihrer Bibliothek
angezeigt wird.
Sie können Ausnahmen verketten, um zu zeigen, wie die Behandlung von Ausnahmen abläuft:
>>> try:
5 / 0
except ZeroDivisionError as e:
raise ValueError("Division failed") from e
The above exception was the direct cause of the following exception:
Ausnahmehierarchie
Die Ausnahmebehandlung erfolgt basierend auf einer Ausnahmehierarchie, die durch die
Vererbungsstruktur der Ausnahmeklassen bestimmt wird.
Beispielsweise sind IOError und OSError beide Unterklassen von EnvironmentError . Code, der
https://riptutorial.com/de/home 77
einen IOError , fängt keinen OSError . Code, der einen EnvironmentError IOError , fängt jedoch
sowohl IOError als auch OSError s ab.
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StandardError
| +-- BufferError
| +-- ArithmeticError
| | +-- FloatingPointError
| | +-- OverflowError
| | +-- ZeroDivisionError
| +-- AssertionError
| +-- AttributeError
| +-- EnvironmentError
| | +-- IOError
| | +-- OSError
| | +-- WindowsError (Windows)
| | +-- VMSError (VMS)
| +-- EOFError
| +-- ImportError
| +-- LookupError
| | +-- IndexError
| | +-- KeyError
| +-- MemoryError
| +-- NameError
| | +-- UnboundLocalError
| +-- ReferenceError
| +-- RuntimeError
| | +-- NotImplementedError
| +-- SyntaxError
| | +-- IndentationError
| | +-- TabError
| +-- SystemError
| +-- TypeError
| +-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
https://riptutorial.com/de/home 78
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StopAsyncIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
+-- LookupError
| +-- IndexError
| +-- KeyError
+-- MemoryError
+-- NameError
| +-- UnboundLocalError
+-- OSError
| +-- BlockingIOError
| +-- ChildProcessError
| +-- ConnectionError
| | +-- BrokenPipeError
| | +-- ConnectionAbortedError
| | +-- ConnectionRefusedError
| | +-- ConnectionResetError
| +-- FileExistsError
| +-- FileNotFoundError
| +-- InterruptedError
| +-- IsADirectoryError
| +-- NotADirectoryError
| +-- PermissionError
| +-- ProcessLookupError
| +-- TimeoutError
+-- ReferenceError
+-- RuntimeError
| +-- NotImplementedError
| +-- RecursionError
+-- SyntaxError
| +-- IndentationError
| +-- TabError
+-- SystemError
+-- TypeError
+-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
https://riptutorial.com/de/home 79
+-- BytesWarning
+-- ResourceWarning
Ausnahmen sind nur reguläre Python-Objekte, die von der integrierten BaseException erben. Ein
Python-Skript kann die Anweisung raise verwenden, raise Ausführung zu unterbrechen, sodass
Python an diesem Punkt einen Stack-Trace des Aufrufstapels und eine Darstellung der
Ausnahmeinstanz ausgibt. Zum Beispiel:
was besagt, dass ein ValueError mit der Meldung 'Example error!' wurde durch unsere
failing_function() , die im Interpreter ausgeführt wurde.
Anrufcode kann beliebige Ausnahmen aller Art behandeln, die ein Anruf auslösen kann:
>>> try:
... failing_function()
... except ValueError:
... print('Handled the error')
Handled the error
Sie können halten , die Ausnahme - Objekte erhalten , indem sie in der Zuordnung except... Teil
des Ausnahmebehandlung Code:
>>> try:
... failing_function()
... except ValueError as e:
... print('Caught exception', repr(e))
Caught exception ValueError('Example error!',)
Eine vollständige Liste der integrierten Python-Ausnahmen mit ihren Beschreibungen finden Sie in
der Python-Dokumentation: https://docs.python.org/3.5/library/exceptions.html . Und hier ist die
vollständige Liste hierarchisch angeordnet: Ausnahmehierarchie .
class FooException(Exception):
pass
try:
raise FooException("insert description here")
except FooException:
https://riptutorial.com/de/home 80
print("A FooException was raised.")
class NegativeError(ValueError):
pass
def foo(x):
# function that only accepts positive values of x
if x < 0:
raise NegativeError("Cannot process negative numbers")
... # rest of function body
try:
result = foo(int(input("Enter a positive integer: "))) # raw_input in Python 2.x
except NegativeError:
print("You entered a negative number!")
else:
print("The result was " + str(result))
try:
very_difficult_function()
except Exception:
# log / try to reconnect / exit gratiously
finally:
print "The END"
# it runs no matter what execute.
Oder sogar alles (dazu gehören BaseException und alle BaseException einschließlich Exception ):
try:
even_more_difficult_function()
except:
pass # do whatever needed
In den meisten Fällen ist es eine schlechte Praxis. Es könnte mehr als beabsichtigt sein, z. B.
SystemExit , KeyboardInterrupt und MemoryError Jeder sollte im Allgemeinen anders behandelt
werden als MemoryError System- oder Logikfehler. Dies bedeutet auch, dass es kein klares
Verständnis dafür gibt, was der interne Code falsch machen kann und wie er sich von diesem
Zustand richtig erholen kann. Wenn Sie jeden Fehler feststellen, wissen Sie nicht, welcher Fehler
aufgetreten ist oder wie er zu beheben ist.
Dies wird häufiger als "Bug Masking" bezeichnet und sollte vermieden werden. Lassen Sie Ihr
Programm abstürzen, anstatt im Hintergrund zu versagen oder gar zu verschlimmern, und zwar
auf einer tieferen Ausführungsebene. (Stellen Sie sich vor, es ist ein Transaktionssystem)
Normalerweise werden diese Konstrukte auf der äußersten Ebene des Programms verwendet und
protokollieren die Details des Fehlers, sodass der Fehler behoben werden kann oder der Fehler
genauer behandelt werden kann.
https://riptutorial.com/de/home 81
Mehrere Ausnahmen abfangen
Die erste besteht darin, ein Tupel der Ausnahmetypen zu erstellen, die auf dieselbe Weise
abgefangen und behandelt werden sollen. In diesem Beispiel ignoriert der Code die Ausnahmen
KeyError und AttributeError .
try:
d = {}
a = d[1]
b = d.non_existing_field
except (KeyError, AttributeError) as e:
print("A KeyError or an AttributeError exception has been caught.")
Wenn Sie unterschiedliche Ausnahmen auf unterschiedliche Weise behandeln möchten, können
Sie für jeden Typ einen eigenen Ausnahmeblock bereitstellen. In diesem Beispiel fangen wir
immer noch KeyError und AttributeError , behandeln die Ausnahmen jedoch auf unterschiedliche
Weise.
try:
d = {}
a = d[1]
b = d.non_existing_field
except KeyError as e:
print("A KeyError has occurred. Exception message:", e)
except AttributeError as e:
print("An AttributeError has occurred. Exception message:", e)
Benutzereingabe
Stellen Sie sich vor, Sie möchten, dass ein Benutzer über die Eingabe eine Nummer input . Sie
möchten sicherstellen, dass die Eingabe eine Zahl ist. Sie können try / mit except davon
verwenden:
while True:
try:
nb = int(input('Enter a number: '))
break
except ValueError:
print('This is not a number, try again.')
Hinweis: Python 2.x verwendet stattdessen raw_input . die Funktion input existiert in Python 2.x
hat aber eine andere Semantik. Im obigen Beispiel würde die input auch Ausdrücke wie 2 + 2
akzeptieren, die eine Zahl ergeben.
https://riptutorial.com/de/home 82
Wenn die Eingabe nicht in eine Ganzzahl konvertiert werden konnte, wird ein ValueError . Sie
können es mit except fangen. Wenn keine Ausnahme ausgelöst wird break springt break aus der
Schleife. Nach der Schleife enthält nb eine ganze Zahl.
Wörterbücher
Stellen Sie sich über eine Liste von aufeinanderfolgenden ganzen Zahlen iterieren, wie range(n) ,
und Sie haben eine Liste der Wörterbücher d , die Informationen über die Dinge enthält zu tun ,
wenn Sie einige bestimmte ganze Zahlen auftreten, sagen die überspringen d[i] Nächsten.
for i in range(len(d)):
do_stuff(i)
try:
dic = d[i]
i += dic[i]
except KeyError:
i += 1
Ein KeyError wird KeyError , wenn Sie versuchen, einen Wert aus einem Wörterbuch für einen nicht
vorhandenen Schlüssel KeyError .
Sonst
Code in einem else-Block wird nur ausgeführt, wenn vom Code im try Block keine Ausnahmen
ausgelöst wurden. Dies ist nützlich, wenn Sie Code haben, den Sie nicht ausführen möchten,
wenn eine Ausnahme ausgelöst wird. Sie möchten jedoch nicht, dass durch diesen Code
ausgelöste Ausnahmen abgefangen werden.
Zum Beispiel:
try:
data = {1: 'one', 2: 'two'}
print(data[1])
except KeyError as e:
print('key not found')
else:
raise ValueError()
# Output: one
# Output: ValueError
Beachten Sie, dass diese Art von else: nicht mit einer if -Klausel zu einem elif . Wenn Sie
Folgendes haben, if es unter dem else: eingerückt bleiben muss:
try:
...
except ...:
...
else:
if ...:
https://riptutorial.com/de/home 83
...
elif ...:
...
else:
...
https://riptutorial.com/de/home 84
Kapitel 14: Bedienmodul
Examples
Operatoren als Alternative zu einem Infix-Operator
1 + 1
# Output: 2
from operator import add
add(1, 1)
# Output: 2
Obwohl in der Hauptdokumentation angegeben ist, dass für die arithmetischen Operatoren nur
numerische Eingaben zulässig sind, ist dies möglich:
Methodenaufruf
Itemgetter
Gruppieren der Schlüssel-Wert-Paare eines Wörterbuchs nach dem Wert mit itemgetter :
https://riptutorial.com/de/home 85
dict((i, dict(v)) for i, v in groupby(adict.items(), itemgetter(1)))
# Output: {1: {'a': 1, 'c': 1}, 5: {'b': 5}}
was einer lambda Funktion wie folgt entspricht (aber schneller ist):
Oder eine Liste von Tupeln nach dem zweiten Element sortieren, zuerst das erste Element als
sekundär:
https://riptutorial.com/de/home 86
Kapitel 15: Befehlszeilenargumente
analysieren
Einführung
Die meisten Befehlszeilentools sind auf Argumente angewiesen, die bei der Ausführung an das
Programm übergeben werden. Anstatt zur Eingabe aufzufordern, erwarten diese Programme,
dass Daten oder bestimmte Flags (die zu Booleans werden) gesetzt werden. Dies ermöglicht es
dem Benutzer und anderen Programmen, die Python-Datei auszuführen, wobei die Daten beim
Start übergeben werden. In diesem Abschnitt wird die Implementierung und Verwendung von
Befehlszeilenargumenten in Python erläutert und veranschaulicht.
Examples
Hallo Welt in Schwierigkeiten
Das folgende Programm sagt dem Benutzer Hallo. Es erfordert ein Positionsargument, den
Namen des Benutzers, und die Begrüßung kann auch mitgeteilt werden.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name',
help='name of user'
)
parser.add_argument('-g', '--greeting',
default='Hello',
help='optional alternate greeting'
)
args = parser.parse_args()
print("{greeting}, {name}!".format(
greeting=args.greeting,
name=args.name)
)
positional arguments:
name name of user
optional arguments:
-h, --help show this help message and exit
-g GREETING, --greeting GREETING
optional alternate greeting
https://riptutorial.com/de/home 87
$ python hello.py world
Hello, world!
$ python hello.py John -g Howdy
Howdy, John!
docopt konvertiert Befehlszeilenargumente auf den Kopf. Statt die Argumente zu analysieren,
schreiben Sie einfach die Verwendungszeichenfolge für Ihr Programm, und docopt analysiert
die Verwendungszeichenfolge und verwendet sie zum Extrahieren der Befehlszeilenargumente.
"""
Usage:
script_name.py [-a] [-b] <path>
Options:
-a Print all the things.
-b Get more bees into the path.
"""
from docopt import docopt
if __name__ == "__main__":
args = docopt(__doc__)
import pprint; pprint.pprint(args)
Probeläufe:
$ python script_name.py
Usage:
script_name.py [-a] [-b] <path>
$ python script_name.py something
{'-a': False,
'-b': False,
'<path>': 'something'}
$ python script_name.py something -a
{'-a': True,
'-b': False,
'<path>': 'something'}
$ python script_name.py -b something -a
{'-a': True,
'-b': True,
'<path>': 'something'}
Wenn zwei oder mehr Argumente sich gegenseitig ausschließen sollen. Sie können die Funktion
argparse.ArgumentParser.add_mutually_exclusive_group() . Im folgenden Beispiel können entweder
foo oder bar vorhanden sein, jedoch nicht beide gleichzeitig.
import argparse
https://riptutorial.com/de/home 88
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-f", "--foo")
group.add_argument("-b", "--bar")
args = parser.parse_args()
print "foo = ", args.foo
print "bar = ", args.bar
Wenn Sie versuchen, das Skript --foo --bar Argumente --foo und --bar , beschwert sich das
Skript mit der folgenden Meldung.
Wenn ein Python-Skript von der Befehlszeile aus aufgerufen wird, kann der Benutzer zusätzliche
Befehlszeilenargumente angeben, die an das Skript übergeben werden. Diese Argumente
werden an den Programmierer von der Systemvariablen zur Verfügung sys.argv ( „argv“ ist ein
traditioneller Name in den meisten Programmiersprachen verwendet, und es bedeutet „arg
UMENT v ector“).
sys.argv ist das erste Element in der Liste sys.argv der Name des Python-Skripts selbst, während
die übrigen Elemente die Token sind, die der Benutzer beim Aufrufen des Skripts sys.argv .
# cli.py
import sys
print(sys.argv)
$ python cli.py
=> ['cli.py']
Hier ist ein weiteres Beispiel für die Verwendung von argv . Wir entfernen zunächst das
ursprüngliche Element von sys.argv, da es den Namen des Skripts enthält. Dann kombinieren wir
den Rest der Argumente in einem einzigen Satz und drucken diesen Satz vor dem Namen des
aktuell angemeldeten Benutzers (damit ein Chat-Programm emuliert wird).
import getpass
import sys
words = sys.argv[1:]
sentence = " ".join(words)
print("[%s] %s" % (getpass.getuser(), sentence))
Der Algorithmus, der häufig verwendet wird, wenn eine Anzahl nicht-positioneller Argumente
"manuell" analysiert wird, besteht darin, die Liste sys.argv . Eine Möglichkeit ist, die Liste
durchzugehen und jedes Element davon zu platzieren:
https://riptutorial.com/de/home 89
# reverse and copy sys.argv
argv = reversed(sys.argv)
# extract the first element
arg = argv.pop()
# stop iterating when there's no more args to pop()
while len(argv) > 0:
if arg in ('-f', '--foo'):
print('seen foo!')
elif arg in ('-b', '--bar'):
print('seen bar!')
elif arg in ('-a', '--with-arg'):
arg = arg.pop()
print('seen value: {}'.format(arg))
# get the next value
arg = argv.pop()
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-f", "--foo")
parser.add_argument("-b", "--bar")
args = parser.parse_args()
if args.foo and args.bar is None:
parser.error("--foo requires --bar. You did not specify bar.")
Angenommen, Ihr Skriptname lautet sample.py, und wir führen python sample.py --foo
ds_in_fridge : python sample.py --foo ds_in_fridge
Wenn Sie argparse ArgumentParser () erstellen und Ihr Programm mit '-h' ausführen, erhalten Sie
eine automatisierte Verwendungsnachricht, in der erläutert wird, mit welchen Argumenten Sie Ihre
Software ausführen können. Positionsargumente und bedingte Argumente sind standardmäßig in
zwei Kategorien unterteilt. Beispiel: Ein kleines Skript (example.py) und die Ausgabe, wenn Sie
python example.py -h ausführen.
import argparse
https://riptutorial.com/de/home 90
parser = argparse.ArgumentParser(description='Simple example')
parser.add_argument('name', help='Who to greet', default='World')
parser.add_argument('--bar_this')
parser.add_argument('--bar_that')
parser.add_argument('--foo_this')
parser.add_argument('--foo_that')
args = parser.parse_args()
Simple example
positional arguments:
name Who to greet
optional arguments:
-h, --help show this help message and exit
--bar_this BAR_THIS
--bar_that BAR_THAT
--foo_this FOO_THIS
--foo_that FOO_THAT
Es gibt Situationen, in denen Sie Ihre Argumente in weitere konzeptionelle Abschnitte unterteilen
möchten, um Ihren Benutzer zu unterstützen. Beispielsweise möchten Sie möglicherweise alle
Eingabeoptionen in einer Gruppe und alle Optionen zur Ausgabeformatierung in einer anderen
Gruppe haben. Das obige Beispiel kann angepasst werden, um die --foo_* args von den --bar_*
args zu trennen.
import argparse
Simple example
positional arguments:
name Who to greet
optional arguments:
https://riptutorial.com/de/home 91
-h, --help show this help message and exit
Foo options:
--bar_this BAR_THIS
--bar_that BAR_THAT
Bar options:
--foo_this FOO_THIS
--foo_that FOO_THAT
Wie bei docopt bilden Sie mit [docopt_dispatch] Ihre --help in die Variable __doc__ Ihres
Einstiegspunktmoduls. Dort rufen Sie dispatch mit dem doc-String als Argument auf, damit der
Parser darüber laufen kann.
Anstatt die Argumente manuell zu handhaben (was normalerweise in einer if / else-Struktur mit
hoher Zyklizität endet), überlassen Sie es dem Versand, indem Sie nur angeben, wie Sie die
Menge der Argumente behandeln wollen.
Dafür gibt es den dispatch.on Dekorator: Sie geben ihm das Argument oder die Folge von
Argumenten, die die Funktion auslösen sollen, und diese Funktion wird mit den
übereinstimmenden Werten als Parameter ausgeführt.
"""
from docopt_dispatch import dispatch
@dispatch.on('--development')
def development(host, port, **kwargs):
print('in *development* mode')
@dispatch.on('--production')
def development(host, port, **kwargs):
print('in *production* mode')
@dispatch.on('items', 'add')
def items_add(item, **kwargs):
print('adding item...')
@dispatch.on('items', 'delete')
def items_delete(item, **kwargs):
print('deleting item...')
if __name__ == '__main__':
dispatch(__doc__)
https://riptutorial.com/de/home 92
Kapitel 16: Benutzerdefinierte Fehler /
Ausnahmen auslösen
Einführung
In Python gibt es viele Ausnahmen, die das Programm dazu zwingen, einen Fehler auszugeben,
wenn ein Fehler auftritt.
Manchmal müssen Sie jedoch benutzerdefinierte Ausnahmen erstellen, die Ihrem Zweck dienen.
In Python können Benutzer solche Ausnahmen definieren, indem sie eine neue Klasse erstellen.
Diese Ausnahmeklasse muss direkt oder indirekt von der Ausnahmeklasse abgeleitet werden. Die
meisten der integrierten Ausnahmen sind auch von dieser Klasse abgeleitet.
Examples
Benutzerdefinierte Ausnahme
Hier haben wir eine benutzerdefinierte Ausnahme namens CustomError erstellt, die von der
Exception-Klasse abgeleitet wird. Diese neue Ausnahme kann wie andere Ausnahmen ausgelöst
werden, wenn die Erhöhungsanweisung mit einer optionalen Fehlermeldung verwendet wird.
class CustomError(Exception):
pass
x = 1
if x == 1:
raise CustomError('This is custom error')
Ausgabe:
class CustomError(Exception):
pass
try:
raise CustomError('Can you catch me ?')
except CustomError as e:
https://riptutorial.com/de/home 93
print ('Catched CustomError :{}'.format(e))
except Exception as e:
print ('Generic exception: {}'.format(e))
Ausgabe:
https://riptutorial.com/de/home 94
Kapitel 17: Benutzerdefinierte Methoden
Examples
Benutzerdefinierte Methodenobjekte erstellen
Benutzerdefinierte Methodenobjekte können erstellt werden, wenn ein Attribut einer Klasse
abgerufen wird (möglicherweise über eine Instanz dieser Klasse), wenn dieses Attribut ein
benutzerdefiniertes Funktionsobjekt, ein ungebundenes benutzerdefiniertes Methodenobjekt oder
ein Klassenmethodenobjekt ist.
class A(object):
# func: A user-defined function object
#
# Note that func is a function object when it's defined,
# and an unbound method object when it's retrieved.
def func(self):
pass
class B(object):
# unboundMeth: A unbound user-defined method object
#
# Parent.func is an unbound user-defined method object here,
# because it's retrieved.
unboundMeth = A.func
a = A()
b = B()
print A.func
# output: <unbound method A.func>
print a.func
# output: <bound method A.func of <__main__.A object at 0x10e9ab910>>
print B.unboundMeth
# output: <unbound method A.func>
print b.unboundMeth
# output: <unbound method A.func>
print A.classMethod
# output: <bound method type.classMethod of <class '__main__.A'>>
print a.classMethod
# output: <bound method type.classMethod of <class '__main__.A'>>
Wenn das Attribut ein benutzerdefiniertes Methodenobjekt ist, wird ein neues Methodenobjekt nur
erstellt, wenn die Klasse, von der es abgerufen wird, mit der im ursprünglichen Methodenobjekt
gespeicherten Klasse übereinstimmt oder davon abgeleitet ist. Andernfalls wird das ursprüngliche
Methodenobjekt unverändert verwendet.
https://riptutorial.com/de/home 95
class Parent(object):
# func: The underlying function of original method object
def func(self):
pass
func2 = func
Im Folgenden finden Sie ein Beispiel für die Verwendung einer benutzerdefinierten Funktion, die in
einem Skript einfach (∞) mal aufgerufen werden kann.
https://riptutorial.com/de/home 96
Kapitel 18: Binärdaten
Syntax
• pack (fmt, v1, v2, ...)
• entpacken (fmt, puffer)
Examples
Formatieren Sie eine Liste von Werten in ein Byteobjekt
Struktur verpacken
Das Modul " struct " bietet die Möglichkeit, Python-Objekte als zusammenhängende Byte-Blöcke
zu packen oder eine Menge von Byte in Python-Strukturen zu zerlegen.
Die Pack-Funktion akzeptiert eine Formatzeichenfolge und ein oder mehrere Argumente und gibt
eine Binärzeichenfolge zurück. Das sieht fast so aus, als würden Sie eine Zeichenfolge
formatieren, mit der Ausnahme, dass die Ausgabe keine Zeichenfolge ist, sondern ein Teil von
Bytes.
import struct
import sys
print "Native byteorder: ", sys.byteorder
# If no byteorder is specified, native byteorder is used
buffer = struct.pack("ihb", 3, 4, 5)
print "Byte chunk: ", repr(buffer)
print "Byte chunk unpacked: ", struct.unpack("ihb", buffer)
# Last element as unsigned short instead of unsigned char ( 2 Bytes)
buffer = struct.pack("ihh", 3, 4, 5)
print "Byte chunk: ", repr(buffer)
Ausgabe:
Native Byte-Reihenfolge: kleiner Byte-Block: '\ x03 \ x00 \ x00 \ x00 \ x04 \ x00 \ x05'
Byte-Block entpackt: (3, 4, 5) Byte-Block: '\ x03 \ x00 \ x00 \ x00 \ x04 \ x00 \ x05 \ x00 '
https://riptutorial.com/de/home 97
Sie können die Bytereihenfolge des Netzwerks für Daten verwenden, die vom Netzwerk
empfangen werden, oder Packdaten, um sie an das Netzwerk zu senden.
import struct
# If no byteorder is specified, native byteorder is used
buffer = struct.pack("hhh", 3, 4, 5)
print "Byte chunk native byte order: ", repr(buffer)
buffer = struct.pack("!hhh", 3, 4, 5)
print "Byte chunk network byte order: ", repr(buffer)
Ausgabe:
Reihenfolge der Bytes des Byte-Chunks: '\ x00 \ x03 \ x00 \ x04 \ x00 \ x05'
Sie können die Optimierung optimieren, indem Sie den Aufwand für die Zuweisung eines neuen
Puffers vermeiden, indem Sie einen zuvor erstellten Puffer bereitstellen.
import struct
from ctypes import create_string_buffer
bufferVar = create_string_buffer(8)
bufferVar2 = create_string_buffer(8)
# We use a buffer that has already been created
# provide format, buffer, offset and data
struct.pack_into("hhh", bufferVar, 0, 3, 4, 5)
print "Byte chunk: ", repr(bufferVar.raw)
struct.pack_into("hhh", bufferVar2, 2, 3, 4, 5)
print "Byte chunk: ", repr(bufferVar2.raw)
Ausgabe:
Byte-Block: '\ x03 \ x00 \ x04 \ x00 \ x05 \ x00 \ x00 \ x00'
Byte-Block: '\ x00 \ x00 \ x03 \ x00 \ x04 \ x00 \ x05 \ x00'
https://riptutorial.com/de/home 98
Kapitel 19: Bitweise Operatoren
Einführung
Bitweise Operationen ändern binäre Zeichenfolgen auf Bitebene. Diese Operationen sind
unglaublich einfach und werden vom Prozessor direkt unterstützt. Diese wenigen Operationen
sind für die Arbeit mit Gerätetreibern, Low-Level-Grafik, Kryptografie und Netzwerkkommunikation
erforderlich. Dieser Abschnitt enthält nützliche Kenntnisse und Beispiele für die bitweisen
Operatoren von Python.
Syntax
• x << y # Bitweise Linksverschiebung
• x | y # Bitweise ODER
• ~ x # Bitweise NICHT
• x ^ y # Bitweise XOR
Examples
Bitweises AND
Der Operator & führt ein binäres AND aus , wobei ein Bit kopiert wird, wenn es in beiden
Operanden vorhanden ist. Das bedeutet:
# 0 & 0 = 0
# 0 & 1 = 0
# 1 & 0 = 0
# 1 & 1 = 1
# 60 = 0b111100
# 30 = 0b011110
60 & 30
# Out: 28
# 28 = 0b11100
Bitweises ODER
Die | Der Operator führt ein binäres "oder" aus, wobei ein Bit kopiert wird, wenn es in einem der
https://riptutorial.com/de/home 99
Operanden vorhanden ist. Das bedeutet:
# 0 | 0 = 0
# 0 | 1 = 1
# 1 | 0 = 1
# 1 | 1 = 1
# 60 = 0b111100
# 30 = 0b011110
60 | 30
# Out: 62
# 62 = 0b111110
bin(60 | 30)
# Out: 0b111110
Der Operator ^ führt eine binäre XOR aus, in der eine binäre 1 genau dann kopiert wird, wenn es
sich um den Wert genau eines Operanden handelt. Eine andere Möglichkeit dies zu sagen ist,
dass das Ergebnis nur 1 , wenn die Operanden unterschiedlich sind. Beispiele beinhalten:
# 0 ^ 0 = 0
# 0 ^ 1 = 1
# 1 ^ 0 = 1
# 1 ^ 1 = 0
# 60 = 0b111100
# 30 = 0b011110
60 ^ 30
# Out: 34
# 34 = 0b100010
bin(60 ^ 30)
# Out: 0b100010
Bitweise Linksverschiebung
Der Operator << führt eine bitweise "Linksverschiebung" aus, bei der der Wert des linken
Operanden um die vom rechten Operanden angegebene Anzahl Bits nach links verschoben wird.
# 2 = 0b10
2 << 2
# Out: 8
# 8 = 0b1000
bin(2 << 2)
# Out: 0b1000
Das Durchführen einer Verschiebung um 1 nach links entspricht der Multiplikation mit 2 :
7 << 1
# Out: 14
https://riptutorial.com/de/home 100
Das Durchführen einer Verschiebung des linken Bits um n entspricht der Multiplikation mit 2**n :
3 << 4
# Out: 48
Bitweise Rechtsverschiebung
Der Operator >> führt eine bitweise "Rechtsverschiebung" aus, bei der der Wert des linken
Operanden um die vom rechten Operanden angegebene Anzahl von Bits nach rechts verschoben
wird.
# 8 = 0b1000
8 >> 2
# Out: 2
# 2 = 0b10
bin(8 >> 2)
# Out: 0b10
Das Durchführen einer Verschiebung um 1 nach rechts entspricht der Division von Ganzzahlen
durch 2 :
36 >> 1
# Out: 18
15 >> 1
# Out: 7
Das Durchführen einer Verschiebung um n rechts nach rechts entspricht der ganzzahligen Division
um 2**n :
48 >> 4
# Out: 3
59 >> 3
# Out: 7
Bitweises NICHT
Der Operator ~ dreht alle Bits in der Zahl um. Da Computer vorzeichenbehaftete
Zahlendarstellungen verwenden - vor allem die Zweierkomplementschreibweise zur Kodierung
negativer Binärzahlen, wobei negative Zahlen mit einer führenden Zahl (1) anstelle einer
führenden Null (0) geschrieben werden.
Das bedeutet, wenn Sie 8 Bits für die Darstellung Ihrer Zweierkomplement-Zahlen verwenden,
würden Sie Muster von 0000 0000 bis 0111 1111 , dass sie Zahlen von 0 bis 127 darstellen, und 1xxx
xxxx für negative Zahlen.
Acht-Bit-Zwei-Komplement-Zahlen
https://riptutorial.com/de/home 101
Bits Vorzeichenloser Wert Zwei-Komplementwert
0000 0000 0 0
0000 0001 1 1
0000 0010 2 2
Im Wesentlichen bedeutet dies, dass 1010 0110 einen vorzeichenlosen Wert von 166 hat (durch
Hinzufügen von (128 * 1) + (64 * 0) + (32 * 1) + (16 * 0) + (8 * 0) + (4 * 1) + (2 * 1) + (1 *
0) ) hat es einen Zweierkomplementwert von -90 (durch Hinzufügen von (128 * 1) - (64 * 0) -
(32 * 1) - (16 * 0) - (8 * 0) - (4 * 1) - (2 * 1) - (1 * 0) und den Wert ergänzen).
Auf diese Weise reichen negative Zahlen bis -128 ( 1000 0000 ). Null (0) wird als 0000 0000 und
minus Eins (-1) als 1111 1111 .
# 0 = 0b0000 0000
~0
# Out: -1
# -1 = 0b1111 1111
# 1 = 0b0000 0001
~1
# Out: -2
# -2 = 1111 1110
# 2 = 0b0000 0010
~2
# Out: -3
# -3 = 0b1111 1101
Beachten Sie , dass die Gesamtwirkung dieses Vorgangs bei Anwendung auf positive Zahlen
https://riptutorial.com/de/home 102
zusammengefasst werden kann:
~n -> -|n+1|
Bei einer Anwendung auf negative Zahlen lautet der entsprechende Effekt:
# -0 = 0b0000 0000
~-0
# Out: -1
# -1 = 0b1111 1111
# 0 is the obvious exception to this rule, as -0 == 0 always
# -1 = 0b1000 0001
~-1
# Out: 0
# 0 = 0b0000 0000
# -2 = 0b1111 1110
~-2
# Out: 1
# 1 = 0b0000 0001
Inplace-Operationen
a = 0b001
a &= 0b010
# a = 0b000
a = 0b001
a |= 0b010
# a = 0b011
a = 0b001
a <<= 2
# a = 0b100
a = 0b100
a >>= 2
# a = 0b001
a = 0b101
a ^= 0b011
# a = 0b110
https://riptutorial.com/de/home 103
Kapitel 20: Boolesche Operatoren
Examples
und
Bewertet das zweite Argument genau dann, wenn beide Argumente wahr sind. Ansonsten wird
das erste Falsey-Argument ausgewertet.
x = True
y = True
z = x and y # z = True
x = True
y = False
z = x and y # z = False
x = False
y = True
z = x and y # z = False
x = False
y = False
z = x and y # z = False
x = 1
y = 1
z = x and y # z = y, so z = 1, see `and` and `or` are not guaranteed to be a boolean
x = 0
y = 1
z = x and y # z = x, so z = 0 (see above)
x = 1
y = 0
z = x and y # z = y, so z = 0 (see above)
x = 0
y = 0
z = x and y # z = x, so z = 0 (see above)
Die 1 ‚s in dem obigen Beispiel kann an jeden truthy Wert geändert werden, und die 0 ‘ s kann auf
jeden Falsey Wert geändert werden.
oder
Bewertet das erste wahrheitsgemäße Argument, wenn eines der Argumente wahr ist Wenn beide
Argumente falsch sind, wird das zweite Argument bewertet.
x = True
y = True
z = x or y # z = True
https://riptutorial.com/de/home 104
x = True
y = False
z = x or y # z = True
x = False
y = True
z = x or y # z = True
x = False
y = False
z = x or y # z = False
x = 1
y = 1
z = x or y # z = x, so z = 1, see `and` and `or` are not guaranteed to be a boolean
x = 1
y = 0
z = x or y # z = x, so z = 1 (see above)
x = 0
y = 1
z = x or y # z = y, so z = 1 (see above)
x = 0
y = 0
z = x or y # z = y, so z = 0 (see above)
Die 1 ‚s in dem obigen Beispiel kann an jeden truthy Wert geändert werden, und die 0 ‘ s kann auf
jeden Falsey Wert geändert werden.
nicht
x = True
y = not x # y = False
x = False
y = not x # y = True
Kurzschlussauswertung
https://riptutorial.com/de/home 105
>>> false_func() or true_func()
false_func()
true_func()
True
>>> true_func() and false_func()
true_func()
false_func()
False
>>> false_func() and false_func()
false_func()
False
Wenn Sie or , wird entweder der erste Wert im Ausdruck zurückgegeben, wenn er wahr ist,
andernfalls wird der zweite Wert blind angezeigt. Dh or entspricht:
Bei and wird der erste Wert zurückgegeben, wenn er falsch ist, ansonsten wird der letzte Wert
zurückgegeben:
In Python können Sie ein einzelnes Element mit zwei binären Operatoren vergleichen - einen auf
beiden Seiten:
In vielen (den meisten?) Programmiersprachen wird dies im Gegensatz zur regulären Mathematik
bewertet: (3.14 < x) < 3.142 , aber in Python wird es wie 3.14 < x and x < 3.142 , genau wie die
meisten Nichtprogrammierer würde erwarten.
https://riptutorial.com/de/home 106
Kapitel 21: ChemPy - Python-Paket
Einführung
ChemPy ist ein Python-Paket, das hauptsächlich zur Lösung und Behebung von Problemen in der
physikalischen, analytischen und anorganischen Chemie entwickelt wurde. Es ist ein kostenloses
Open-Source-Python-Toolkit für Anwendungen in den Bereichen Chemie, Chemieingenieurwesen
und Materialwissenschaft.
Examples
Analysieren von Formeln
In der Zusammensetzung werden die Ordnungszahlen (und 0 für die Ladung) als Schlüssel
verwendet, und die Anzahl jeder Art wurde zum jeweiligen Wert.
Ausgleichende Reaktionen
https://riptutorial.com/de/home 107
e2 = Equilibrium({'O2': 1, 'H2O': 2, 'e-': 4}, {'OH-': 4}, K2)
coeff = Equilibrium.eliminate([e1, e2], 'e-')
coeff
[4, -5]
redox = e1*coeff[0] + e2*coeff[1]
print(redox)
20 OH- + 32 H+ + 4 MnO4- = 26 H2O + 4 Mn+2 + 5 O2; K1**4/K2**5
autoprot = Equilibrium({'H2O': 1}, {'H+': 1, 'OH-': 1}, Kw)
n = redox.cancel(autoprot)
n
20
redox2 = redox + n*autoprot
print(redox2)
12 H+ + 4 MnO4- = 4 Mn+2 + 5 O2 + 6 H2O; K1**4*Kw**20/K2**5
Chemische Gleichgewichte
Ionenstärke
from chempy import ReactionSystem # The rate constants below are arbitrary
rsys = ReactionSystem.from_string("""2 Fe+2 + H2O2 -> 2 Fe+3 + 2 OH-; 42
2 Fe+3 + H2O2 -> 2 Fe+2 + O2 + 2 H+; 17
H+ + OH- -> H2O; 1e10
H2O -> H+ + OH-; 1e-4
Fe+3 + 2 H2O -> FeOOH(s) + 3 H+; 1
FeOOH(s) + 3 H+ -> Fe+3 + 2 H2O; 2.5""") # "[H2O]" = 1.0 (actually 55.4 at RT)
from chempy.kinetics.ode import get_odesys
odesys, extra = get_odesys(rsys)
from collections import defaultdict
import numpy as np
tout = sorted(np.concatenate((np.linspace(0, 23), np.logspace(-8, 1))))
https://riptutorial.com/de/home 108
c0 = defaultdict(float, {'Fe+2': 0.05, 'H2O2': 0.1, 'H2O': 1.0, 'H+': 1e-7, 'OH-': 1e-7})
result = odesys.integrate(tout, c0, atol=1e-12, rtol=1e-14)
import matplotlib.pyplot as plt
_ = plt.subplot(1, 2, 1)
_ = result.plot(names=[k for k in rsys.substances if k != 'H2O'])
_ = plt.legend(loc='best', prop={'size': 9}); _ = plt.xlabel('Time'); _ =
plt.ylabel('Concentration')
_ = plt.subplot(1, 2, 2)
_ = result.plot(names=[k for k in rsys.substances if k != 'H2O'], xscale='log', yscale='log')
_ = plt.legend(loc='best', prop={'size': 9}); _ = plt.xlabel('Time'); _ =
plt.ylabel('Concentration')
_ = plt.tight_layout()
plt.show()
https://riptutorial.com/de/home 109
Kapitel 22: CLI-Unterbefehle mit präziser
Hilfeausgabe
Einführung
Verschiedene Möglichkeiten zum Erstellen von Unterbefehlen wie hg oder svn mit der genauen
Befehlszeilenschnittstelle und Hilfeausgabe (siehe Abschnitt "Anmerkungen")
Das Analysieren von Befehlszeilenargumenten deckt ein breiteres Thema der Argumentanalyse
ab.
Bemerkungen
Verschiedene Möglichkeiten zum Erstellen von Unterbefehlen wie hg oder svn mit der
Befehlszeilenschnittstelle in der Hilfemeldung
commands:
Examples
Nativer Weg (keine Bibliotheken)
"""
usage: sub <command>
commands:
import sys
def check():
print("status")
return 0
if sys.argv[1:] == ['status']:
sys.exit(check())
elif sys.argv[1:] == ['list']:
print("list")
else:
print(__doc__.strip())
https://riptutorial.com/de/home 110
Ausgabe ohne Argumente:
commands:
Pros:
• keine deps
• Jeder sollte das lesen können
• vollständige Kontrolle über die Formatierung der Hilfe
argparse (Standard-Hilfeformatierer)
import argparse
import sys
def check():
print("status")
return 0
args = parser.parse_args()
if args.cmd == 'list':
print('list')
elif args.cmd == 'status':
sys.exit(check())
positional arguments:
{status,list}
status show status
list print list
Pros:
https://riptutorial.com/de/home 111
argparse (benutzerdefinierte Formatierungshilfe)
import argparse
import sys
class CustomHelpFormatter(argparse.HelpFormatter):
def _format_action(self, action):
if type(action) == argparse._SubParsersAction:
# inject new class variable for subcommand formatting
subactions = action._get_subactions()
invocations = [self._format_action_invocation(a) for a in subactions]
self._subcommand_max_length = max(len(i) for i in invocations)
if type(action) == argparse._SubParsersAction._ChoicesPseudoAction:
# format subcommand help line
subcommand = self._format_action_invocation(action) # type: str
width = self._subcommand_max_length
help_text = ""
if action.help:
help_text = self._expand_help(action)
return " {:{width}} - {}\n".format(subcommand, help_text, width=width)
def check():
print("status")
return 0
subparser = parser.add_subparsers(dest="cmd")
subparser.add_parser('status', help='show status')
subparser.add_parser('list', help='print list')
args = parser.parse_args()
if args.cmd == 'list':
print('list')
elif args.cmd == 'status':
https://riptutorial.com/de/home 112
sys.exit(check())
commands:
https://riptutorial.com/de/home 113
Kapitel 23: Codeblöcke, Ausführungsrahmen
und Namespaces
Einführung
Ein Codeblock ist ein Stück Python-Programmtext, der als Einheit ausgeführt werden kann,
beispielsweise als Modul, Klassendefinition oder Funktionskörper. Einige Codeblöcke (wie
Module) werden normalerweise nur einmal ausgeführt, andere (wie Funktionskörper) können
mehrmals ausgeführt werden. Codeblöcke können textuell andere Codeblöcke enthalten.
Codeblöcke können andere Codeblöcke (die möglicherweise textuell in ihnen enthalten sind) als
Teil ihrer Ausführung aufrufen, z.
Examples
Codeblock-Namespaces
globale ns des
Klassendefinition neuer Namespace
enthaltenden Blocks
globale ns des
Funktionskörper neuer Namespace
enthaltenden Blocks
Datei gelesen von execfile() globale ns des anrufers lokale ns des anrufers
Ausdruck gelesen von input() globale ns des anrufers lokale ns des anrufers
https://riptutorial.com/de/home 114
Kapitel 24: Commonwealth-Ausnahmen
Einführung
Hier in Stack Overflow sehen wir häufig Duplikate, die über dieselben Fehler sprechen:
"ImportError: No module named '??????' , SyntaxError: invalid syntax oder NameError: name '???' is
not defined . Dies ist ein Versuch, sie zu reduzieren und Dokumentation zu haben, auf die verlinkt
werden kann.
Examples
Einrückungsfehler (oder EinzugssyntaxErrors)
In den meisten anderen Sprachen ist die Einrückung nicht zwingend, sondern in Python (und
anderen Sprachen: frühe Versionen von FORTRAN, Makefiles, Whitespace (esoterische Sprache)
usw.). Dies ist jedoch nicht der Fall. wenn Sie Code von einem Beispiel zu Ihrem eigenen kopieren
oder einfach, wenn Sie neu sind.
Beispiel
Es gibt keinen Grund, das Niveau hier zu erhöhen:
Hier gibt es zwei Fehler: den letzten und dass die Einrückung keiner Einrückungsebene entspricht.
Es wird jedoch nur eine gezeigt:
https://riptutorial.com/de/home 115
Python 3.x 3.0
Beispiel
Python 2.x 2.0 2.7
def foo():
print "This should be part of foo()"
print "ERROR!"
print "This is not a part of foo()"
Beispiel
if ok:
doStuff()
Anmerkung : Verwenden Sie das Schlüsselwort pass (das macht absolut nichts), um einfach eine
if , else , except class , method oder definition aber nicht zu sagen, was passiert, wenn der Aufruf /
condition true ist (tun Sie es aber später oder im Fall von except : einfach nichts tun):
def foo():
pass
https://riptutorial.com/de/home 116
IndentationError: Inkonsistente Verwendung
von Tabulatoren und Leerzeichen beim
Einzug
Beispiel
def foo():
if ok:
return "Two != Four != Tab"
return "i dont care i do whatever i want"
1. Stellen Sie Ihren Editor so ein, dass er 4 Leerzeichen für die Einrückung verwendet.
2. Machen Sie eine Suche und ersetzen Sie sie, um alle Registerkarten durch 4 Leerzeichen
zu ersetzen.
3. Stellen Sie sicher, dass Ihr Editor so eingestellt ist, dass die Registerkarten als 8
Leerzeichen angezeigt werden, sodass Sie den Fehler leicht erkennen und beheben
können.
Sehen Sie sich diese Frage an, wenn Sie mehr erfahren möchten.
TypeErrors
Diese Ausnahmen werden verursacht, wenn der Typ eines Objekts unterschiedlich sein sollte
Beispiel
Wenn mehr Argumente angegeben werden:
https://riptutorial.com/de/home 117
Wenn weniger Argumente angegeben werden:
Hinweis : Wenn Sie eine unbekannte Anzahl von Argumenten verwenden möchten, können Sie
*args oder **kwargs . Siehe * args und ** kwargs
Beispiel
Zum Beispiel: + wird zum Verketten und Hinzufügen verwendet, aber Sie können keine davon für
beide Typen verwenden. Um zum Beispiel eine machen versuchen , set durch die Verkettung ( +
ing) 'set1' und 'tuple1' gibt den Fehler. Code:
Einige Typen (zB: int und string ) verwenden beide + jedoch für verschiedene Dinge:
b = 400 + 'foo'
c = ["a","b"] - [1,2]
d = 1 + 1.0
https://riptutorial.com/de/home 118
nicht mehr gültig ist , und ein IndexError angehoben wird (Technisch: es ist eine haben , hat
__iter__ Methode , die ein zurückgibt __iterator__ , oder das eines definiert __getitem__ Verfahren
, das tut was zuvor erwähnt wurde).
Beispiel
Hier sagen wir, dass bar der nullte Punkt von 1. ist.
foo = 1
bar = foo[0]
Dies ist eine diskrete Version: In diesem Beispiel for Versuche einstellen x amount[0] , das erste
Element in einem abzählbaren , aber es kann nicht , weil Menge ist ein int:
amount = 10
for x in amount: print(x)
Beispiel
foo = "notAFunction"
foo()
Wird ausgelöst, wenn Sie versucht haben, eine Variable, Methode oder Funktion zu verwenden,
die nicht initialisiert wurde (zumindest nicht vorher). Mit anderen Worten, es wird ausgelöst, wenn
ein angeforderter lokaler oder globaler Name nicht gefunden wird. Möglicherweise haben Sie den
Namen des Objekts falsch geschrieben oder vergessen, etwas zu import . Vielleicht auch in einem
anderen Bereich. Wir werden diese mit separaten Beispielen behandeln.
https://riptutorial.com/de/home 119
Vielleicht ist es später definiert:
baz()
def baz():
pass
def sqrt():
x = float(input("Value: "))
return math.sqrt(x)
• L ocal: Variablen, die nicht global deklariert oder in einer Funktion zugewiesen sind.
• E nclosing: Variablen in einer Funktion definiert , die innerhalb einer anderen Funktion
gewickelt ist.
• G lobale: Variablen erklärt global oder auf der obersten Ebene einer Datei zugeordnet.
• B uilt-in: Variablen vorbelegt im eingebauten Namen Modul.
Als Beispiel:
for i in range(4):
d = i * 2
print(d)
dist zugänglich, weil die for Schleife keinen neuen Gültigkeitsbereich markiert, aber wenn dies
der Fall wäre, hätten wir einen Fehler und sein Verhalten wäre ähnlich:
def noaccess():
for i in range(4):
d = i * 2
noaccess()
print(d)
Andere Fehler
https://riptutorial.com/de/home 120
AssertError
Die assert Anweisung existiert in fast jeder Programmiersprache. Wenn Sie das tun:
assert condition
oder:
if __debug__:
if not condition: raise AssertionError(message)
Zusicherungen können eine optionale Nachricht enthalten und Sie können sie deaktivieren, wenn
Sie mit dem Debuggen fertig sind.
Hinweis : Die eingebaute Variable debug ist unter normalen Umständen True, False, wenn die
Optimierung angefordert wird (Befehlszeilenoption -O). Zuweisungen zum Debuggen sind illegal.
Der Wert für die integrierte Variable wird beim Start des Interpreters festgelegt.
KeyboardInterrupt
Fehler ausgelöst , wenn der Benutzer die Interrupt - Taste drückt, normalerweise Strg + C oder
del.
ZeroDivisionError
Sie haben versucht, 1/0 zu berechnen, das nicht definiert ist. Sehen Sie sich dieses Beispiel an,
um die Teiler einer Zahl zu finden:
https://riptutorial.com/de/home 121
ZeroDivisionError da die for Schleife diesen Wert x zuordnet. Stattdessen sollte es sein:
Die grobe Mehrheit der Zeit, zu der ein SyntaxError auf eine uninteressante Zeile verweist,
bedeutet, dass ein Problem in der Zeile davor vorliegt (in diesem Beispiel fehlt eine Klammer):
def my_print():
x = (1 + 1
print(x)
Kehrt zurück
Der häufigste Grund für dieses Problem sind nicht übereinstimmende Klammern / Klammern, wie
das Beispiel zeigt.
print("hello world") # Note this is valid for both Py2 & Py3
https://riptutorial.com/de/home 122
Kapitel 25: Conditionals
Einführung
Bedingte Ausdrücke mit Schlüsselwörtern wie if, elif und anderen geben Python-Programmen die
Möglichkeit, abhängig von einer booleschen Bedingung verschiedene Aktionen auszuführen: True
oder False. In diesem Abschnitt wird die Verwendung von Python-Bedingungen, Booleschen Logik
und ternären Anweisungen beschrieben.
Syntax
• <Ausdruck> wenn <Bedingt> sonst <Ausdruck> # Ternärer Operator
Examples
wenn, elif und sonst
In Python können Sie eine Reihe von conditionals mit definieren , if für die ersten, elif für den
Rest, bis die endgültigen (optional) else für alles , was nicht von dem anderen conditionals
gefangen.
number = 5
if number > 2:
print("Number is bigger than 2.")
elif number < 2: # Optional clause (you can have multiple elifs)
print("Number is smaller than 2.")
else: # Optional clause (you can only have one else)
print("Number is 2.")
Die Verwendung von else if anstelle von elif löst einen Syntaxfehler aus und ist nicht zulässig.
Der ternäre Operator wird für inline bedingte Ausdrücke verwendet. Es wird am besten für
einfache, präzise Operationen verwendet, die leicht zu lesen sind.
• Die Reihenfolge der Argumente unterscheidet sich von vielen anderen Sprachen (wie z. B.
C, Ruby, Java usw.). Dies kann zu Fehlern führen, wenn Personen, die mit Pythons
"überraschendem" Verhalten nicht vertraut sind, sie verwenden (sie können die Reihenfolge
umkehren).
• Einige finden es "unhandlich", da es dem normalen Gedankenfluss zuwiderläuft (zuerst an
den Zustand denken und dann an die Auswirkungen).
https://riptutorial.com/de/home 123
n = 5
Das Ergebnis dieses Ausdrucks wird so sein, wie er auf Englisch gelesen wird. Wenn der
Bedingungsausdruck "True" ist, wird der Ausdruck auf der linken Seite ausgewertet, ansonsten
auf der rechten Seite.
n = 5
"Hello" if n > 10 else "Goodbye" if n > 5 else "Good day"
Sie bieten auch eine Methode zum Einbinden von Bedingungen in Lambda-Funktionen .
Wenn Aussage
if condition:
body
Die if Anweisungen prüfen die Bedingung. Wenn es als True ausgewertet wird, führt es den
Hauptteil der if Anweisung aus. Wenn es als False ausgewertet wird, wird der Körper
übersprungen.
if True:
print "It is true!"
>> It is true!
if False:
print "This won't get printed.."
if 2 + 2 == 4:
print "I know math!"
>> I know math!
Else Aussage
if condition:
body
else:
body
Die else-Anweisung führt ihren Rumpf nur dann aus, wenn alle vorausgehenden
Bedingungsanweisungen zu False ausgewertet werden.
if True:
print "It is true!"
https://riptutorial.com/de/home 124
else:
print "This won't get printed.."
# Output: It is true!
if False:
print "This won't get printed.."
else:
print "It is false!"
# Output: It is false!
Boolesche Logikausdrücke
Boolesche Logikausdrücke geben nicht nur True oder False , sondern geben den Wert zurück , der
als True oder False interpretiert wurde. Es ist eine Pythonic-Methode, um Logik darzustellen, für
die ansonsten ein If-else-Test erforderlich wäre.
Und Betreiber
Der Operator and wertet alle Ausdrücke aus und gibt den letzten Ausdruck zurück, wenn alle
Ausdrücke den Wert True . Andernfalls wird der erste Wert zurückgegeben, der den Wert False
ergibt:
>>> 1 and 2
2
>>> 1 and 0
0
Oder Betreiber
Der Operator or wertet die Ausdrücke von links nach rechts aus und gibt den ersten Wert, der den
Wert True ergibt, oder den letzten Wert zurück (wenn keiner True ).
>>> 1 or 2
1
>>> None or 1
1
>>> 0 or []
[]
https://riptutorial.com/de/home 125
Faule Auswertung
Wenn Sie diesen Ansatz verwenden, denken Sie daran, dass die Auswertung faul ist. Ausdrücke,
die zur Ermittlung des Ergebnisses nicht ausgewertet werden müssen, werden nicht ausgewertet.
Zum Beispiel:
Im obigen Beispiel wird print_me niemals ausgeführt, da Python feststellen kann, dass der
gesamte Ausdruck False wenn er auf 0 ( False ) trifft. print_me Sie dies, wenn print_me muss, um
Ihre Programmlogik zu bedienen.
In diesem Beispiel wird geprüft, ob zwei Variablen jeweils größer als 2 sind. Die Anweisung wird
als - if (a) and (b > 2) ausgewertet. Dies führt zu einem unerwarteten Ergebnis, da bool(a) als
True ausgewertet wird, wenn a nicht Null ist.
>>> a = 1
>>> b = 6
>>> if a and b > 2:
... print('yes')
... else:
... print('no')
yes
no
Ein anderer, ähnlicher Fehler wird gemacht, wenn geprüft wird, ob eine Variable einen von
mehreren Werten hat. Die Anweisung in diesem Beispiel wird als - if (a == 3) or (4) or (6)
ausgewertet. Dies führt zu einem unerwarteten Ergebnis, da bool(4) und bool(6) jeweils True
>>> a = 1
https://riptutorial.com/de/home 126
>>> if a == 3 or 4 or 6:
... print('yes')
... else:
... print('no')
yes
>>> if a == 3 or a == 4 or a == 6:
... print('yes')
... else:
... print('no')
no
no
Wahrheitswerte
Die folgenden Werte werden als Falsey betrachtet, da sie bei Anwendung auf einen booleschen
Operator als False ausgewertet werden.
• Keiner
• Falsch
• 0 oder ein beliebiger numerischer Wert gleich Null, zum Beispiel 0L , 0.0 , 0j
• Leere Sequenzen: '' , "" , () , []
• Leere Zuordnungen: {}
• Benutzerdefinierte Typen, bei denen die Methoden __bool__ oder __len__ 0 oder False
Hinweis: Ein häufiger Fehler besteht darin, einfach nach der Falschheit einer Operation zu
suchen, die verschiedene Falsey-Werte zurückgibt, bei denen der Unterschied von Bedeutung ist.
Verwenden Sie zum Beispiel if foo() anstelle des expliziteren if foo() is None
Python 2 enthält eine cmp Funktion, mit der Sie feststellen können, ob ein Objekt kleiner als ein
anderes Objekt ist oder diesem entspricht. Diese Funktion kann verwendet werden, um eine
Auswahl aus einer Liste basierend auf einer dieser drei Optionen auszuwählen.
https://riptutorial.com/de/home 127
Angenommen, Sie müssen 'greater than' drucken 'greater than' wenn x > y , 'less than' wenn x
< y und 'equal' wenn x == y .
Vergleich Ergebnis
x <y -1
x == y 0
x> y 1
Diese Funktion wird auf Python entfernt 3. Sie können die Verwendung cmp_to_key(func) in sich
Helferfunktion functools in Python 3 zu alten Vergleichsfunktionen auf die wichtigsten Funktionen
zu konvertieren.
Zum Beispiel,
[value_false, value_true][<conditional-test>]
Beispiel:
>> n = 16
>> print [10, 20][n <= 15]
10
Hier gibt n<=15 False (was in Python gleich 0 ist). Was Python bewertet, ist also:
Die eingebaute __cmp __cmp__ Methode gab 3 mögliche Werte zurück: 0, 1, -1, wobei cmp (x, y) 0:
zurückgab, wenn beide Objekte gleich 1 waren: x> y -1: x <y
Dies könnte bei List Comprehensions verwendet werden, um das erste (dh Index 0), zweite (dh
https://riptutorial.com/de/home 128
Index 1) und letzte (dh Index -1) Element der Liste zurückzugeben. Geben Sie uns eine
Bedingung dieses Typs:
Schließlich wertet Python in allen obigen Beispielen beide Zweige aus, bevor er einen auswählt.
Um nur den ausgewählten Zweig auszuwerten:
Durch das Hinzufügen von () am Ende wird sichergestellt, dass die Lambda-Funktionen nur am
Ende aufgerufen / ausgewertet werden. Daher bewerten wir nur den ausgewählten Zweig.
Beispiel:
Oft möchten Sie einem Objekt etwas zuweisen, wenn es None ist, um None , dass es noch nicht
zugewiesen wurde. Wir werden ein aDate .
Der einfachste Weg, dies zu tun, ist die Verwendung des is None Tests.
if aDate is None:
aDate=datetime.date.today()
(Beachten Sie, dass es mehr Pythonic ist, um zu sagen, is None statt == None .)
Dies kann jedoch geringfügig optimiert werden, indem die Vorstellung ausgenutzt wird, dass " not
None in einem boolschen Ausdruck als " True ausgewertet wird. Der folgende Code ist gleichwertig:
if not aDate:
aDate=datetime.date.today()
Es gibt aber einen mehr pythonischen Weg. Der folgende Code ist ebenfalls gleichwertig:
aDate=aDate or datetime.date.today()
Dies führt eine Kurzschlussbewertung durch . Wenn aDate initialisiert ist und not None , wird es sich
ohne Nettoeffekt zugewiesen. Wenn is None , wird datetime.date.today() einem aDate zugewiesen.
https://riptutorial.com/de/home 129
Kapitel 26: configparser
Einführung
Dieses Modul stellt die ConfigParser-Klasse bereit, die eine grundlegende Konfigurationssprache
in INI-Dateien implementiert. Sie können dies verwenden, um Python-Programme zu schreiben,
die vom Endbenutzer leicht angepasst werden können.
Syntax
• Jede neue Zeile enthält ein neues Schlüsselwertpaar, getrennt durch das Zeichen =
• Schlüssel können in Abschnitte unterteilt werden
• In der INI-Datei wird jeder Abschnittstitel in Klammern geschrieben: []
Bemerkungen
Alle Rückgabewerte von ConfigParser.ConfigParser().get sind Strings. Dank eval kann es in
gängigere Typen umgewandelt werden
Examples
Grundlegende Verwendung
In der config.ini:
[DEFAULT]
debug = True
name = Test
password = password
[FILES]
path = /path/to/file
In Python:
https://riptutorial.com/de/home 130
Konfigurationsdatei programmatisch erstellen
Konfigurationsdatei enthält Abschnitte, jeder Abschnitt enthält Schlüssel und Werte. Das
configparser-Modul kann zum Lesen und Schreiben von Konfigurationsdateien verwendet werden.
Erstellen der Konfigurationsdatei: -
import configparser
config = configparser.ConfigParser()
config['settings']={'resolution':'320x240',
'color':'blue'}
with open('example.ini', 'w') as configfile:
config.write(configfile)
[settings]
resolution = 320x240
color = blue
Wenn Sie ein bestimmtes Feld ändern möchten, rufen Sie das Feld ab und weisen Sie den Wert
zu
settings=config['settings']
settings['color']='red'
https://riptutorial.com/de/home 131
Kapitel 27: CSV lesen und schreiben
Examples
TSV-Datei schreiben
Python
import csv
Ausgabedatei
$ cat /tmp/output.tsv
name field
Dijkstra Computer Science
Shelah Math
Aumann Economic Sciences
Pandas benutzen
Schreiben Sie eine CSV-Datei aus einem dict oder einem DataFrame .
import pandas as pd
Lesen Sie eine CSV-Datei als DataFrame und konvertieren Sie sie in ein dict :
df = pd.read_csv("data.csv")
d = df.to_dict()
https://riptutorial.com/de/home 132
Kapitel 28: ctypes
Einführung
ctypes ist eine in Python integrierte Bibliothek, die exportierte Funktionen aus nativen kompilierten
Bibliotheken aufruft.
Hinweis: Da diese Bibliothek kompilierten Code verarbeitet, ist sie relativ vom Betriebssystem
abhängig.
Examples
Grundlegende Verwendung
Nehmen wir an, wir wollen die ntohl Funktion von libc ntohl .
>>> ntohl(0x6C)
1811939328
>>> hex(_)
'0x6c000000'
Häufige Fehler
Dies liegt entweder daran, dass die Datei nicht existiert (oder vom Betriebssystem nicht gefunden
https://riptutorial.com/de/home 133
wird):
>>> cdll.LoadLibrary("foobar.so")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/ctypes/__init__.py", line 425, in LoadLibrary
return self._dlltype(name)
File "/usr/lib/python3.5/ctypes/__init__.py", line 347, in __init__
self._handle = _dlopen(self._name, mode)
OSError: foobar.so: cannot open shared object file: No such file or directory
Wie Sie sehen können, ist der Fehler klar und bezeichnend.
Der zweite Grund ist, dass die Datei gefunden wurde, aber nicht das richtige Format hat.
>>> cdll.LoadLibrary("libc.so")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/ctypes/__init__.py", line 425, in LoadLibrary
return self._dlltype(name)
File "/usr/lib/python3.5/ctypes/__init__.py", line 347, in __init__
self._handle = _dlopen(self._name, mode)
OSError: /usr/lib/i386-linux-gnu/libc.so: invalid ELF header
In diesem Fall ist die Datei eine Skriptdatei und keine .so Datei. Dies kann auch passieren, wenn
Sie versuchen, eine .dll Datei auf einem Linux-Computer oder eine 64-Bit-Datei auf einem 32-Bit-
Python-Interpreter zu öffnen. Wie Sie sehen, ist der Fehler in diesem Fall etwas ungenauer und
erfordert einige Eingrabungen.
Wenn eine nicht vorhandene Funktion verwendet wird, wird ein AttributeError ausgelöst:
>>> libc.foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/ctypes/__init__.py", line 360, in __getattr__
func = self.__getitem__(name)
File "/usr/lib/python3.5/ctypes/__init__.py", line 365, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /lib/i386-linux-gnu/libc.so.6: undefined symbol: foo
https://riptutorial.com/de/home 134
c_long(12)
Nun bezieht sich obj auf einen Speicherblock, der den Wert 12 enthält.
>>> obj.value
12
>>> obj.value = 13
>>> obj
c_long(13)
Da sich obj auf einen Speicherplatz bezieht, können wir auch die Größe und den Speicherort
ermitteln:
>>> sizeof(obj)
4
>>> hex(addressof(obj))
'0xdeadbeef'
ctypes Arrays
Wie jeder gute C-Programmierer weiß, wird ein einzelner Wert Sie nicht so weit bringen. Was uns
wirklich in Fahrt bringen wird, sind Arrays!
>>> c_int * 16
<class '__main__.c_long_Array_16'>
Dies ist kein tatsächliches Array, aber es ist verdammt nah! Wir haben eine Klasse erstellt, die ein
Array von 16 int s kennzeichnet.
Jetzt ist arr ein tatsächliches Array, das die Zahlen von 0 bis 15 enthält.
>>> arr[5]
5
>>> arr[5] = 20
>>> arr[5]
20
Und wie jedes andere ctypes Objekt hat es auch eine Größe und einen Ort:
>>> sizeof(arr)
https://riptutorial.com/de/home 135
64 # sizeof(c_int) * 16
>>> hex(addressof(arr))
'0xc000l0ff'
In einigen Fällen akzeptiert eine C-Funktion einen Funktionszeiger. Als avid ctypes Benutzer
möchten wir diese Funktionen verwenden und sogar die Python-Funktion als Argumente
übergeben.
Nun nimmt diese Funktion zwei Argumente an und gibt ein Ergebnis desselben Typs zurück.
Nehmen wir im Beispiel an, dass type ein int ist.
Wie beim Array-Beispiel können wir ein Objekt definieren, das diesen Prototyp kennzeichnet:
Dieser Prototyp bezeichnet eine Funktion, die ein c_int (das erste Argument) c_int und zwei c_int
Argumente (die anderen Argumente) akzeptiert.
Funktionsprototypen haben mehr Verwendung: Sie können ctypes function (wie libc.ntohl )
libc.ntohl und überprüfen, ob beim Aufrufen der Funktion die richtigen Argumente verwendet
werden.
Komplexe Verwendung
Lassen Sie uns alle obigen Beispiele in einem komplexen Szenario kombinieren: Verwenden Sie
die lfind Funktion von libc .
Weitere Informationen zu dieser Funktion finden Sie in der Manpage . Ich bitte Sie dringend, es zu
lesen, bevor Sie fortfahren.
https://riptutorial.com/de/home 136
Zuerst definieren wir die richtigen Prototypen:
Beachten Sie, dass x und y POINTER(c_int) sind POINTER(c_int) müssen wir sie dereferenzieren und
ihre Werte verwenden, um den im Speicher gespeicherten Wert vergleichen zu können.
ptr ist der zurückgegebene Leerzeiger. Wenn der key nicht in arr gefunden wurde, arr der Wert
None , aber in diesem Fall haben wir einen gültigen Wert erhalten.
Wir können auch sehen, dass ptr auf den korrekten Wert innerhalb von arr :
https://riptutorial.com/de/home 137
Kapitel 29: Das base64-Modul
Einführung
Die Base 64-Codierung stellt ein allgemeines Schema für die Codierung von Binärzeichen in das
ASCII-Zeichenfolgenformat mit Radix 64 dar. Das Base64-Modul ist Teil der Standardbibliothek,
dh es wird zusammen mit Python installiert. Das Verständnis von Bytes und Strings ist für dieses
Thema von entscheidender Bedeutung und kann hier überprüft werden . In diesem Thema wird
erläutert, wie Sie die verschiedenen Funktionen und Nummernbasis des base64-Moduls
verwenden.
Syntax
• base64.b64encode (s, altchars = None)
• base64.b64decode (s, altchars = None, validate = False)
• base64.standard_b64encode (s)
• base64.standard_b64decode (s)
• base64.urlsafe_b64encode (s)
• base64.urlsafe_b64decode (s)
• base64.b32encode (s)
• base64.b32decode (s)
• base64.b16encode (s)
• base64.b16decode (s)
• base64.a85encode (b, foldspaces = False, wrapcol = 0, pad = False, adobe = False)
• base64.a85decode (b, foldpaces = False, adobe = False, ignorechars = b \ t \ n \ r \ v
• base64.b85encode (b, pad = False)
• base64.b85decode (b)
Parameter
Parameter Beschreibung
base64.b64encode(s, altchars=None)
base64.b64decode(s, altchars=None,
validate=False)
https://riptutorial.com/de/home 138
Parameter Beschreibung
base64.standard_b64encode(s)
base64.standard_b64decode(s)
base64.urlsafe_b64encode(s)
base64.urlsafe_b64decode(s)
b32encode(s)
b32decode(s)
base64.b16encode(s)
base64.b16decode(s)
base64.a85encode(b, foldspaces=False,
wrapcol=0, pad=False, adobe=False)
https://riptutorial.com/de/home 139
Parameter Beschreibung
base64.a85decode(b, foldspaces=False,
adobe=False, ignorechars=b'\t\n\r\v')
base64.b85encode(b, pad=False)
base64.b85decode(b)
Bemerkungen
Bis zum Erscheinen von Python 3.4 funktionierten base64-Codierungs- und -
Decodierungsfunktionen nur mit bytes oder bytearray Typen. Jetzt akzeptieren diese Funktionen
alle bytesähnlichen Objekte .
Examples
Codierung und Decodierung von Base64
https://riptutorial.com/de/home 140
import base64
s = "Hello World!"
b = s.encode("UTF-8")
b'Hello World!'
Das Präfix b wird verwendet, um anzugeben, dass der Wert ein Byteobjekt ist.
import base64
s = "Hello World!"
b = s.encode("UTF-8")
e = base64.b64encode(b)
print(e)
b'SGVsbG8gV29ybGQh'
die noch im Byte-Objekt ist. Um einen String aus diesen Bytes zu erhalten, können wir die
decode() Methode von Python mit der UTF-8 Codierung verwenden:
import base64
s = "Hello World!"
b = s.encode("UTF-8")
e = base64.b64encode(b)
s1 = e.decode("UTF-8")
print(s1)
SGVsbG8gV29ybGQh
Wenn wir den String codieren und dann decodieren base64.b64decode() , können wir die
base64.b64decode() -Methode verwenden:
import base64
# Creating a string
s = "Hello World!"
# Encoding the string into bytes
b = s.encode("UTF-8")
# Base64 Encode the bytes
https://riptutorial.com/de/home 141
e = base64.b64encode(b)
# Decoding the Base64 bytes to string
s1 = e.decode("UTF-8")
# Printing Base64 encoded string
print("Base64 Encoded:", s1)
# Encoding the Base64 encoded string into bytes
b1 = s1.encode("UTF-8")
# Decoding the Base64 bytes
d = base64.b64decode(b1)
# Decoding the bytes to string
s2 = d.decode("UTF-8")
print(s2)
Wie Sie vielleicht erwartet haben, wäre die Ausgabe die Originalzeichenfolge:
Das base64-Modul enthält auch Codierungs- und Decodierungsfunktionen für Base32. Diese
Funktionen sind den Base64-Funktionen sehr ähnlich:
import base64
# Creating a string
s = "Hello World!"
# Encoding the string into bytes
b = s.encode("UTF-8")
# Base32 Encode the bytes
e = base64.b32encode(b)
# Decoding the Base32 bytes to string
s1 = e.decode("UTF-8")
# Printing Base32 encoded string
print("Base32 Encoded:", s1)
# Encoding the Base32 encoded string into bytes
b1 = s1.encode("UTF-8")
# Decoding the Base32 bytes
d = base64.b32decode(b1)
# Decoding the bytes to string
s2 = d.decode("UTF-8")
print(s2)
Das base64-Modul enthält auch Codierungs- und Decodierungsfunktionen für Base16. Die Basis
16 wird am häufigsten als Hexadezimal bezeichnet . Diese Funktionen sind den Funktionen
Base64 und Base32 sehr ähnlich:
https://riptutorial.com/de/home 142
import base64
# Creating a string
s = "Hello World!"
# Encoding the string into bytes
b = s.encode("UTF-8")
# Base16 Encode the bytes
e = base64.b16encode(b)
# Decoding the Base16 bytes to string
s1 = e.decode("UTF-8")
# Printing Base16 encoded string
print("Base16 Encoded:", s1)
# Encoding the Base16 encoded string into bytes
b1 = s1.encode("UTF-8")
# Decoding the Base16 bytes
d = base64.b16decode(b1)
# Decoding the bytes to string
s2 = d.decode("UTF-8")
print(s2)
Adobe hat eine eigene Kodierung namens ASCII85 erstellt, die der von Base85 ähnelt, jedoch
Unterschiede aufweist. Diese Kodierung wird häufig in Adobe PDF-Dateien verwendet. Diese
Funktionen wurden in Python Version 3.4 veröffentlicht. Ansonsten base64.a85encode() die
Funktionen base64.a85encode() und base64.a85encode() der vorherigen:
import base64
# Creating a string
s = "Hello World!"
# Encoding the string into bytes
b = s.encode("UTF-8")
# ASCII85 Encode the bytes
e = base64.a85encode(b)
# Decoding the ASCII85 bytes to string
s1 = e.decode("UTF-8")
# Printing ASCII85 encoded string
print("ASCII85 Encoded:", s1)
# Encoding the ASCII85 encoded string into bytes
b1 = s1.encode("UTF-8")
# Decoding the ASCII85 bytes
d = base64.a85decode(b1)
# Decoding the bytes to string
s2 = d.decode("UTF-8")
print(s2)
https://riptutorial.com/de/home 143
Codierung und Decodierung von Base85
Genau wie die Funktionen Base64, Base32 und Base16 sind die Codierungs- und
Decodierungsfunktionen von base64.b85encode() und base64.b85decode() :
import base64
# Creating a string
s = "Hello World!"
# Encoding the string into bytes
b = s.encode("UTF-8")
# Base85 Encode the bytes
e = base64.b85encode(b)
# Decoding the Base85 bytes to string
s1 = e.decode("UTF-8")
# Printing Base85 encoded string
print("Base85 Encoded:", s1)
# Encoding the Base85 encoded string into bytes
b1 = s1.encode("UTF-8")
# Decoding the Base85 bytes
d = base64.b85decode(b1)
# Decoding the bytes to string
s2 = d.decode("UTF-8")
print(s2)
https://riptutorial.com/de/home 144
Kapitel 30: Das dis-Modul
Examples
Konstanten im dis-Modul
cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is', 'is ...
# A list of comparator id's. The indecies are used as operands in some opcodes
# All opcodes in these lists have the respective types as there operands
hascompare = [107]
hasconst = [100]
hasfree = [135, 136, 137]
hasjabs = [111, 112, 113, 114, 115, 119]
hasjrel = [93, 110, 120, 121, 122, 143]
haslocal = [124, 125, 126]
hasname = [90, 91, 95, 96, 97, 98, 101, 106, 108, 109, 116]
Python ist ein Hybridinterpreter. Wenn ein Programm ausgeführt wird, fügt es es zunächst in
Bytecode zusammen, der dann im Python-Interpreter (auch als virtuelle Python-Maschine
bezeichnet ) ausgeführt werden kann. Das Modul dis in der Standardbibliothek kann verwendet
werden, um den Python-Bytecode durch Disassemblieren von Klassen, Methoden, Funktionen
und Codeobjekten lesbar zu machen.
Jeder Operationscode (Opcode) in der Python-Assemblersprache (der Bytecode) nimmt eine feste
Anzahl von Elementen aus dem Stapel und gibt eine feste Anzahl von Elementen an den Stapel
zurück. Wenn auf dem Stack nicht genügend Elemente für einen Opcode vorhanden sind, stürzt
der Python-Interpreter möglicherweise ohne Fehlermeldung ab.
https://riptutorial.com/de/home 145
Module demontieren
Um ein Python-Modul zu zerlegen, muss dieses zunächst in eine .pyc Datei umgewandelt werden
(Python kompiliert). Um dies zu tun, renne
import dis
import marshal
with open("<file>.pyc", "rb") as code_f:
code_f.read(8) # Magic number and modification time
code = marshal.load(code_f) # Returns a code object which can be disassembled
dis.dis(code) # Output the disassembly
Dadurch wird ein Python-Modul kompiliert und die Bytecode-Anweisungen mit dis ausgegeben.
Das Modul wird niemals importiert, so dass die Verwendung mit nicht vertrauenswürdigem Code
sicher ist.
https://riptutorial.com/de/home 146
Kapitel 31: Das Ländereinstellungsmodul
Bemerkungen
Python 2-Dokumente: [ https://docs.python.org/2/library/locale.html#locale.currency]
Examples
Währungsformatierung in US-Dollar mit dem Gebietsschema-Modul
import locale
locale.setlocale(locale.LC_ALL, '')
Out[2]: 'English_United States.1252'
locale.currency(762559748.49)
Out[3]: '$762559748.49'
locale.currency(762559748.49, grouping=True)
Out[4]: '$762,559,748.49'
https://riptutorial.com/de/home 147
Kapitel 32: Das os-Modul
Einführung
Dieses Modul bietet eine tragbare Möglichkeit, betriebssystemabhängige Funktionen zu
verwenden.
Syntax
• import os
Parameter
Parameter Einzelheiten
Pfad Ein Pfad zu einer Datei. Das os.path.sep kann mit os.path.sep bestimmt werden.
Examples
Erstellen Sie ein Verzeichnis
os.mkdir('newdir')
Wenn Sie die Berechtigungen angeben müssen, können Sie die optionale Verwendung mode
Argument:
os.mkdir('newdir', mode=0700)
print(os.getcwd())
Das os Modul stellt eine Schnittstelle bereit, um zu bestimmen, auf welchem Betriebssystem der
Code aktuell ausgeführt wird.
os.name
https://riptutorial.com/de/home 148
Dies kann in Python 3 einen der folgenden Werte zurückgeben:
• posix
• nt
• ce
• java
os.rmdir(path)
Sie sollten os.remove() nicht verwenden, um ein Verzeichnis zu entfernen. Diese Funktion ist für
Dateien und die Verwendung in Verzeichnissen führt zu einem OSError
Manchmal müssen Sie das Ziel eines Symlinks bestimmen. os.readlink macht das:
print(os.readlink(path_to_symlink))
os.chmod(path, mode)
└── dir1
├── subdir1
└── subdir2
Wir möchten dasselbe Unterverzeichnis1, Unterverzeichnis2 unter einem neuen Verzeichnis dir2
erstellen, das noch nicht vorhanden ist.
import os
os.makedirs("./dir2/subdir1")
os.makedirs("./dir2/subdir2")
https://riptutorial.com/de/home 149
├── dir1
│ ├── subdir1
│ └── subdir2
└── dir2
├── subdir1
└── subdir2
dir2 wird nur erstellt, wenn es zum ersten Mal für die Erstellung von Unterverzeichnis1 benötigt
wird.
Wenn wir stattdessen os.mkdir verwendet hätten , hätten wir eine Ausnahme gehabt, weil dir2
noch nicht existiert hätte.
os.mkdir("./dir2/subdir1")
OSError: [Errno 2] No such file or directory: './dir2/subdir1'
os.makedirs mag es nicht, wenn das Zielverzeichnis bereits existiert. Wenn wir es noch einmal
ausführen:
Dies kann jedoch leicht behoben werden, indem Sie die Ausnahme abfangen und prüfen, ob das
Verzeichnis erstellt wurde.
try:
os.makedirs("./dir2/subdir1")
except OSError:
if not os.path.isdir("./dir2/subdir1"):
raise
try:
os.makedirs("./dir2/subdir2")
except OSError:
if not os.path.isdir("./dir2/subdir2"):
raise
https://riptutorial.com/de/home 150
Kapitel 33: Dateien entpacken
Einführung
Zum Extrahieren oder Dekomprimieren einer Tarball-, ZIP- oder Gzip-Datei werden die Python-
Tarfile-, Zipfile- und Gzip-Module bereitgestellt. Das Tarfile-Modul von Python bietet die Funktion
TarFile.extractall(path=".", members=None) zum Extrahieren aus einer Tarball-Datei. Das Zipfile-
Modul von Python bietet die Funktion ZipFile.extractall([path[, members[, pwd]]]) zum
Extrahieren oder Entpacken von ZIP-komprimierten Dateien. Schließlich stellt das Gzip-Modul von
Python die GzipFile-Klasse zum Dekomprimieren bereit.
Examples
Verwenden Sie Python ZipFile.extractall (), um eine ZIP-Datei zu
dekomprimieren
file_unzip = 'filename.zip'
unzip = zipfile.ZipFile(file_unzip, 'r')
unzip.extractall()
unzip.close()
file_untar = 'filename.tar.gz'
untar = tarfile.TarFile(file_untar)
untar.extractall()
untar.close()
https://riptutorial.com/de/home 151
Kapitel 34: Dateien und Ordner E / A
Einführung
Wenn Sie Daten speichern, lesen oder kommunizieren möchten, ist das Arbeiten mit den Dateien
eines Betriebssystems mit Python sowohl notwendig als auch einfach. Im Gegensatz zu anderen
Sprachen, in denen für die Dateieingabe und -ausgabe komplexes Lesen und Schreiben von
Objekten erforderlich ist, vereinfacht Python den Vorgang, indem nur Befehle zum Öffnen, Lesen
und Schreiben der Datei benötigt werden. In diesem Thema wird erläutert, wie Python mit Dateien
auf dem Betriebssystem kommunizieren kann.
Syntax
• file_object = open (Dateiname [, Zugriffsmodus] [, Pufferung])
Parameter
Parameter Einzelheiten
den Pfad zu Ihrer Datei oder, wenn sich die Datei im Arbeitsverzeichnis
Dateiname
befindet, den Dateinamen Ihrer Datei
Zugriffsmodus ein Zeichenfolgewert, der bestimmt, wie die Datei geöffnet wird
Pufferung Ein ganzzahliger Wert, der für die optionale Zeilenpufferung verwendet wird
Bemerkungen
Während linux Systeme tatsächlich utf-8 als Standard verwenden, gilt dies nicht unbedingt für
Mac und Windows.
import sys
sys.getdefaultencoding()
https://riptutorial.com/de/home 152
von jedem Python-Interpreter.
Daher ist es ratsam, immer eine Codierung zu spezifizieren, um sicherzustellen, dass die Strings,
mit denen Sie arbeiten, so codiert werden, wie Sie sie für wahrscheinlich halten.
Examples
Dateimodi
Es gibt verschiedene Modi, mit denen Sie eine Datei öffnen können, die durch den mode
angegeben wird. Diese schließen ein:
• - Lesemodus. Der Standard. Sie können die Datei nur lesen, nicht ändern. In diesem
'r'
Modus muss die Datei vorhanden sein.
• 'w'- Schreibmodus. Falls nicht vorhanden, wird eine neue Datei erstellt. Andernfalls wird die
Datei gelöscht und Sie können schreiben.
• 'a' - Anfügemodus. Es werden Daten an das Ende der Datei geschrieben. Die Datei wird
nicht gelöscht, und die Datei muss für diesen Modus vorhanden sein.
• - Lesemodus im Binärmodus. Dies ist ähnlich wie bei r nur dass das Lesen im binären
'rb'
Modus erzwungen wird. Dies ist auch eine Standardeinstellung.
• 'r+' - Lesemodus und gleichzeitig Schreibmodus. Auf diese Weise können Sie Dateien
gleichzeitig lesen und beschreiben, ohne r und w .
• 'rb+' - Lese- und Schreibmodus im Binärmodus. Dasselbe wie r+ außer dass die Daten
binär sind
• 'wb' - Schreibmodus in binär. Dasselbe wie w außer dass die Daten binär sind.
• 'w+'- Schreib- und Lesemodus. Genau wie r+ aber wenn die Datei nicht existiert, wird eine
neue erstellt. Andernfalls wird die Datei überschrieben.
• 'wb+' - Schreib- und Lesemodus im Binärmodus. Dasselbe wie w+ aber die Daten sind binär.
• 'ab' - im binären Modus anhängen. Ähnlich wie a dass die Daten binär sind.
• 'a+' - Anhänge- und Lesemodus. Ähnlich wie w+ da eine neue Datei erstellt wird, wenn die
Datei nicht vorhanden ist. Andernfalls befindet sich der Dateizeiger am Ende der Datei,
sofern vorhanden.
• 'ab+' - Anfügen und Lesen im Binärmodus. Dasselbe wie a+ außer dass die Daten binär
sind.
https://riptutorial.com/de/home 153
with open(filename, 'r') as f:
f.read()
with open(filename, 'w') as f:
f.write(filedata)
with open(filename, 'a') as f:
f.write('\n' + newdata)
r r+ w w+ ein a+
Lesen ✔ ✔ ✘ ✔ ✘ ✔
Schreiben ✘ ✔ ✔ ✔ ✔ ✔
Python 3 fügte einen neuen Modus für die exclusive creation damit Sie nicht versehentlich
vorhandene Dateien abschneiden oder überschreiben.
• - offen für exklusive Erstellung, wird FileExistsError wenn die Datei bereits vorhanden ist
'x'
• 'xb' - offen für den Schreibmodus für exklusive Schreibvorgänge in binär. Dasselbe wie x
außer dass die Daten binär sind.
• 'x+' - Lese- und Schreibmodus. Ähnlich wie w+ da eine neue Datei erstellt wird, wenn die
Datei nicht vorhanden ist. Andernfalls wird FileExistsError .
• 'xb+' - Schreib- und Lesemodus. Genau wie x+ aber die Daten sind binär
x x+
Lesen ✘ ✔
Schreiben ✔ ✔
Erlauben Sie einem, Ihren offenen Code für Ihre Datei pythonischer zu schreiben:
try:
with open("fname", "r") as fout:
# Work with your open file
except FileExistsError:
https://riptutorial.com/de/home 154
# Your error handling goes here
import os.path
if os.path.isfile(fname):
with open("fname", "w") as fout:
# Work with your open file
else:
# Your error handling goes here
readline() ermöglicht eine detailliertere Kontrolle der zeilenweisen Iteration. Das Beispiel unten
entspricht dem obigen Beispiel:
Die gemeinsame Verwendung von for-Loop-Iterator und readline () gilt als schlechte Praxis.
Normalerweise wird die readlines() -Methode zum Speichern einer iterierbaren Auflistung der
Dateizeilen verwendet:
Zeile 0: Hallo
Zeile 1: Welt
https://riptutorial.com/de/home 155
Die bevorzugte Methode für Datei-E / A ist die Verwendung des Schlüsselworts with . Dadurch
wird sichergestellt, dass das Dateihandle geschlossen wird, sobald das Lesen oder Schreiben
abgeschlossen ist.
print(content)
oder zu handhaben, die Datei manuell zu schließen, können Sie verzichten with und rufen Sie
einfach close Sie sich:
Denken Sie daran, dass Sie ohne die Verwendung einer with Anweisung die Datei aus Versehen
offen halten können, falls eine unerwartete Ausnahme auftritt:
Python fügt nicht automatisch Zeilenumbrüche ein. Sie müssen dies manuell tun:
Linie 1
Zeile 2
Zeile 3
Zeile 4
Verwenden Sie os.linesep als os.linesep , wenn Sie im Textmodus geöffnete Dateien schreiben
(Standardeinstellung). Verwenden Sie stattdessen \n .
https://riptutorial.com/de/home 156
Wenn Sie eine Codierung angeben möchten, fügen Sie einfach die encoding Parameter an die open
Funktion:
Es ist auch möglich, die print-Anweisung zum Schreiben in eine Datei zu verwenden. Die
Mechanismen unterscheiden sich in Python 2 von Python 3, das Konzept ist jedoch das gleiche,
dass Sie die Ausgabe, die auf den Bildschirm gegangen wäre, nehmen und sie stattdessen in eine
Datei senden kann.
#Note: it is possible to specify the file parameter AND write to the screen
#by making sure file ends up with a None value either directly or via a variable
myfile = None
print(s, file = myfile) # writes to stdout
print(s, file = None) # writes to stdout
import shutil
shutil.copyfile(src, dst)
https://riptutorial.com/de/home 157
import errno
try:
with open(path) as f:
# File exists
except IOError as e:
# Raise the exception if it is not ENOENT (No such file or directory)
if e.errno != errno.ENOENT:
raise
# No such file or directory
Dadurch werden auch Race-Bedingungen vermieden, wenn ein anderer Prozess die Datei
zwischen der Prüfung und der Verwendung gelöscht hat. Diese Wettlaufsituation kann in
folgenden Fällen auftreten:
import os
os.path.isfile('/path/to/some/file.txt')
• pathlib :
import pathlib
path = pathlib.Path('/path/to/some/file.txt')
if path.is_file():
...
Um zu überprüfen, ob ein bestimmter Pfad existiert oder nicht, können Sie das oben beschriebene
EAFP-Verfahren befolgen oder den Pfad explizit überprüfen:
import os
path = "/home/myFiles/directory1"
if os.path.exists(path):
## Do stuff
import shutil
source='//192.168.1.2/Daily Reports'
destination='D:\\Reports\\Today'
shutil.copytree(source, destination)
https://riptutorial.com/de/home 158
import os
for root, folders, files in os.walk(root_dir):
for filename in files:
print root, filename
root_dir kann "." um vom aktuellen Verzeichnis oder einem anderen Pfad aus zu starten.
Wenn Sie auch Informationen über die Datei erhalten möchten, können Sie die effizientere
Methode os.scandir wie folgt verwenden :
Nehmen wir an, Sie möchten nur zwischen bestimmten Zeilen einer Datei iterieren
import itertools
Dies wird durch die Zeilen 13 bis 20 gelesen, da bei der Python-Indexierung von 0 aus begonnen
wird. Daher wird Zeile 1 als 0 indiziert
Da können auch einige zusätzliche Zeilen gelesen werden, indem hier das next() Schlüsselwort
verwendet wird.
Wenn Sie das Dateiobjekt als iterierbares Objekt verwenden, verwenden Sie die readline()
Anweisung hier nicht, da die beiden Verfahren zum Durchlaufen einer Datei nicht miteinander
gemischt werden sollen
Durch Verwendung des mmap Moduls kann der Benutzer willkürlich auf Positionen in einer Datei
zugreifen, indem er die Datei in den Arbeitsspeicher einfügt. Dies ist eine Alternative zur
Verwendung normaler Dateivorgänge.
import mmap
https://riptutorial.com/de/home 159
print mm[5:10]
import fileinput
>>> import os
>>> os.stat(path_to_file).st_size == 0
oder
>>> import os
>>> os.path.getsize(path_to_file) > 0
Beide geben jedoch eine Ausnahme aus, wenn die Datei nicht vorhanden ist. Um zu vermeiden,
einen solchen Fehler abfangen zu müssen, führen Sie folgende Schritte aus:
import os
def is_empty_file(fpath):
return os.path.isfile(fpath) and os.path.getsize(fpath) > 0
https://riptutorial.com/de/home 160
Kapitel 35: Daten kopieren
Examples
Durchführen einer flachen Kopie
Eine flache Kopie ist eine Kopie einer Sammlung, ohne eine Kopie ihrer Elemente auszuführen.
Wenn Sie verschachtelte Listen haben, ist es wünschenswert, auch die verschachtelten Listen zu
klonen. Diese Aktion wird als Tiefenkopie bezeichnet.
>>> l1 = [1,2,3]
>>> l2 = l1[:] # Perform the shallow copy.
>>> l2
[1,2,3]
>>> l1 is l2
False
Wörterbuch kopieren
Ein Dictionary - Objekt hat die Methode copy . Es führt eine flache Kopie des Wörterbuchs aus.
>>> d1 = {1:[]}
>>> d2 = d1.copy()
>>> d1 is d2
False
>>> d1[1] is d2[1]
https://riptutorial.com/de/home 161
True
Sets haben auch eine copy . Mit dieser Methode können Sie eine flache Kopie erstellen.
>>> s1 = {()}
>>> s2 = s1.copy()
>>> s1 is s2
False
>>> s2.add(3)
>>> s1
{[]}
>>> s2
{3,[]}
https://riptutorial.com/de/home 162
Kapitel 36: Datenbankzugriff
Bemerkungen
Python kann viele verschiedene Arten von Datenbanken verarbeiten. Für jeden dieser Typen gibt
es eine andere API. Um die Ähnlichkeit zwischen diesen verschiedenen APIs zu fördern, wurde
PEP 249 eingeführt.
Examples
Zugriff auf MySQL-Datenbank mit MySQLdb
Als Erstes müssen Sie mit der connect-Methode eine Verbindung zur Datenbank herstellen.
Danach benötigen Sie einen Cursor, der mit dieser Verbindung arbeitet.
Verwenden Sie die Ausführungsmethode des Cursors, um mit der Datenbank zu interagieren, und
machen Sie die Änderungen gelegentlich mit der Festschreibungsmethode des
Verbindungsobjekts fest.
import MySQLdb
class Dbconnect(object):
def __init__(self):
self.dbconection = MySQLdb.connect(host='host_example',
port=int('port_example'),
user='user_example',
passwd='pass_example',
db='schema_example')
self.dbcursor = self.dbconection.cursor()
def commit_db(self):
self.dbconection.commit()
def close_db(self):
self.dbcursor.close()
self.dbconection.close()
Die Interaktion mit der Datenbank ist einfach. Nachdem Sie das Objekt erstellt haben, verwenden
https://riptutorial.com/de/home 163
Sie einfach die Ausführungsmethode.
db = Dbconnect()
db.dbcursor.execute('SELECT * FROM %s' % 'table_example')
Wenn Sie eine gespeicherte Prozedur aufrufen möchten, verwenden Sie die folgende Syntax.
Beachten Sie, dass die Parameterliste optional ist.
db = Dbconnect()
db.callproc('stored_procedure_name', [parameters] )
Nachdem die Abfrage abgeschlossen ist, können Sie auf mehrere Arten auf die Ergebnisse
zugreifen. Das Cursorobjekt ist ein Generator, der alle Ergebnisse abrufen oder als Schleife
ausführen kann.
results = db.dbcursor.fetchall()
for individual_row in results:
first_field = individual_row[0]
Wenn Sie eine Schleife verwenden möchten, die direkt den Generator verwendet:
db.commit_db()
db.close_db()
SQLite
import sqlite3
conn = sqlite3.connect("users.db")
c = conn.cursor()
conn.commit()
https://riptutorial.com/de/home 164
c.execute("SELECT * FROM user")
print(c.fetchall())
conn.close()
Der obige Code stellt eine Verbindung zu der Datenbank her, die in der Datei mit dem Namen
users.db gespeichert ist. Die Datei wird zuerst erstellt, wenn sie noch nicht vorhanden ist. Sie
können über SQL-Anweisungen mit der Datenbank interagieren.
2. Um das Modul verwenden zu können, müssen Sie zuerst ein Connection-Objekt erstellen,
das die Datenbank darstellt. Hier werden die Daten in der Datei example.db gespeichert:
Alternativ können Sie auch den speziellen Namen :memory: erstellen Sie eine temporäre
Datenbank im RAM:
3. Sobald Sie eine Connection , können Sie ein Cursor Objekt erstellen und seine Methode
execute() aufrufen, um SQL-Befehle auszuführen:
c = conn.cursor()
# Create table
c.execute('''CREATE TABLE stocks
(date text, trans text, symbol text, qty real, price real)''')
https://riptutorial.com/de/home 165
# Just be sure any changes have been committed or they will be lost.
conn.close()
Mit diesem Attribut wird die aktuelle Isolationsstufe abgerufen oder festgelegt. Keine für den
Autocommit-Modus oder eine der DEFERRED , IMMEDIATE oder EXCLUSIVE .
2. cursor
3. commit()
4. rollback()
Macht alle Änderungen rückgängig, die seit dem letzten Aufruf von commit()
5. close()
6. total_changes
Ein Attribut, das die Gesamtzahl der Zeilen protokolliert, die seit dem Öffnen der Datenbank
geändert, gelöscht oder eingefügt wurden.
Diese Funktionen funktionieren genauso wie die des Cursorobjekts. Dies ist eine Abkürzung,
da der Aufruf dieser Funktionen über das Verbindungsobjekt zur Erstellung eines Cursor-
Zwischenobjekts und zum Aufrufen der entsprechenden Methode des Cursorobjekts führt
8. row_factory
Sie können dieses Attribut in eine aufrufbare Eigenschaft ändern, die den Cursor und die
ursprüngliche Zeile als Tupel akzeptiert und die tatsächliche Ergebniszeile zurückgibt.
conn = sqlite3.connect(":memory:")
conn.row_factory = dict_factory
https://riptutorial.com/de/home 166
Wichtige Funktionen des Cursor
1. execute(sql[, parameters])
Führt eine einzelne SQL-Anweisung aus. Die SQL-Anweisung kann parametrisiert werden
(dh Platzhalter statt SQL-Literale). Das Modul sqlite3 unterstützt zwei Arten von Platzhaltern:
Fragezeichen ? ("Qmark style") und benannte Platzhalter :name ("named style").
import sqlite3
conn = sqlite3.connect(":memory:")
cur = conn.cursor()
cur.execute("create table people (name, age)")
who = "Sophia"
age = 37
# This is the qmark style:
cur.execute("insert into people values (?, ?)",
(who, age))
print(cur.fetchone())
2. executemany(sql, seq_of_parameters)
Führt einen SQL-Befehl für alle in der Sequenz sql gefundenen Parametersequenzen oder -
zuordnungen aus. Das Modul sqlite3 ermöglicht auch die Verwendung eines Iterators, der
anstelle einer Sequenz Parameter liefert.
L = [(1, 'abcd', 'dfj', 300), # A list of tuples to be inserted into the database
(2, 'cfgd', 'dyfj', 400),
(3, 'sdd', 'dfjh', 300.50)]
conn = sqlite3.connect("test1.db")
conn.execute("create table if not exists book (id int, name text, author text, price
real)")
conn.executemany("insert into book values (?, ?, ?, ?)", L)
import sqlite3
class IterChars:
https://riptutorial.com/de/home 167
def __init__(self):
self.count = ord('a')
def __iter__(self):
return self
conn = sqlite3.connect("abc.db")
cur = conn.cursor()
cur.execute("create table characters(c)")
theIter = IterChars()
cur.executemany("insert into characters(c) values (?)", theIter)
3. executescript(sql_script)
Dies ist eine nicht dem Standard entsprechende Methode zum gleichzeitigen Ausführen
mehrerer SQL-Anweisungen. Es gibt zuerst eine COMMIT Anweisung aus und führt dann das
SQL-Skript aus, das es als Parameter erhält.
import sqlite3
conn = sqlite3.connect(":memory:")
cur = conn.cursor()
cur.executescript("""
create table person(
firstname,
lastname,
age
);
Die nächsten Funktionen werden in Verbindung mit SELECT Anweisungen in SQL verwendet.
Um Daten nach der Ausführung einer SELECT Anweisung abzurufen, können Sie den Cursor
entweder als Iterator behandeln, die Methode fetchone() des Cursors fetchone() , um eine
https://riptutorial.com/de/home 168
einzelne übereinstimmende Zeile fetchall() , oder fetchall() aufrufen, um eine Liste der
übereinstimmenden Zeilen fetchall() .
import sqlite3
stocks = [('2006-01-05', 'BUY', 'RHAT', 100, 35.14),
('2006-03-28', 'BUY', 'IBM', 1000, 45.0),
('2006-04-06', 'SELL', 'IBM', 500, 53.0),
('2006-04-05', 'BUY', 'MSFT', 1000, 72.0)]
conn = sqlite3.connect(":memory:")
conn.execute("create table stocks (date text, buysell text, symb text, amount int, price
real)")
conn.executemany("insert into stocks values (?, ?, ?, ?, ?)", stocks)
cur = conn.cursor()
# Output:
# ('2006-01-05', 'BUY', 'RHAT', 100, 35.14)
# ('2006-03-28', 'BUY', 'IBM', 1000, 45.0)
# ('2006-04-06', 'SELL', 'IBM', 500, 53.0)
# ('2006-04-05', 'BUY', 'MSFT', 1000, 72.0)
4. fetchone()
Ruft die nächste Zeile eines Abfrageergebnissatzes ab und gibt eine einzelne Sequenz
zurück oder Keine, wenn keine weiteren Daten verfügbar sind.
# Output:
# ('2006-01-05', 'BUY', 'RHAT', 100, 35.14)
# ('2006-03-28', 'BUY', 'IBM', 1000, 45.0)
# ('2006-04-06', 'SELL', 'IBM', 500, 53.0)
# ('2006-04-05', 'BUY', 'MSFT', 1000, 72.0)
5. fetchmany(size=cursor.arraysize)
Ruft die nächsten Zeilen eines Abfrageergebnisses ab (durch Größe angegeben) und gibt
eine Liste zurück. Wenn size nicht angegeben wird, gibt fetchmany eine einzelne Zeile
zurück. Eine leere Liste wird zurückgegeben, wenn keine weiteren Zeilen verfügbar sind.
# Output:
# [('2006-01-05', 'BUY', 'RHAT', 100, 35.14), ('2006-03-28', 'BUY', 'IBM', 1000, 45.0)]
6. fetchall()
https://riptutorial.com/de/home 169
Ruft alle (verbleibenden) Zeilen eines Abfrageergebnisses ab und gibt eine Liste zurück.
# Output:
# [('2006-01-05', 'BUY', 'RHAT', 100, 35.14), ('2006-03-28', 'BUY', 'IBM', 1000, 45.0),
('2006-04-06', 'SELL', 'IBM', 500, 53.0), ('2006-04-05', 'BUY', 'MSFT', 1000, 72.0)]
SQLite unterstützt nativ die folgenden Typen: NULL, INTEGER, REAL, TEXT, BLOB.
Auf diese Weise werden die Datentypen konvertiert, wenn von SQL zu Python oder umgekehrt
gewechselt wird.
psycopg2 ist der beliebteste PostgreSQL-Datenbankadapter, der leicht und effizient ist. Es ist die
aktuelle Implementierung des PostgreSQL-Adapters.
Seine Hauptmerkmale sind die vollständige Implementierung der Python DB API 2.0-
Spezifikation und die Threadsicherheit (mehrere Threads können dieselbe Verbindung
gemeinsam nutzen).
import psycopg2
# Create a table. Initialise the table name, the column names and data type.
cur.execute("""CREATE TABLE FRUITS (
id INT ,
fruit_name TEXT,
color TEXT,
https://riptutorial.com/de/home 170
price REAL
)""")
conn.commit()
conn.close()
# After creating the table as shown above, insert values into it.
cur.execute("""INSERT INTO FRUITS (id, fruit_name, color, price)
VALUES (1, 'Apples', 'green', 1.00)""")
Tabellendaten abrufen:
ID = 1
NAME = Apples
COLOR = green
PRICE = 1.0
ID = 2
NAME = Bananas
COLOR = yellow
PRICE = 0.8
Und jetzt wissen Sie die Hälfte von allem, was Sie über psycopg2 wissen müssen ! :)
Oracle-Datenbank
Voraussetzungen:
https://riptutorial.com/de/home 171
Konfiguration:
• Extrahieren Sie den Oracle Instant Client und legen Sie die Umgebungsvariablen wie folgt
fest:
ORACLE_HOME=<PATH_TO_INSTANTCLIENT>
PATH=$ORACLE_HOME:$PATH
LD_LIBRARY_PATH=<PATH_TO_INSTANTCLIENT>:$LD_LIBRARY_PATH
Verbindung herstellen:
import cx_Oracle
class OraExec(object):
_db_connection = None
_db_cur = None
def __init__(self):
self._db_connection =
cx_Oracle.connect('<USERNAME>/<PASSWORD>@<HOSTNAME>:<PORT>/<SERVICE_NAME>')
self._db_cur = self._db_connection.cursor()
Datenbankversion abrufen:
ver = con.version.split(".")
print ver
https://riptutorial.com/de/home 172
sind die Änderungen nur in Ihrer Sitzung verfügbar, bis Sie ein commit ausführen. Wenn die
aktualisierten Daten für die Datenbank festgeschrieben sind, stehen sie anderen Benutzern und
Sitzungen zur Verfügung.
Referenz
Verbindung schließen:
_db_connection.close()
Die close () -Methode schließt die Verbindung. Alle Verbindungen, die nicht explizit geschlossen
wurden, werden automatisch freigegeben, wenn das Skript endet.
Verbindung
Verbindung herstellen
Gemäß PEP 249 sollte die Verbindung zu einer Datenbank mithilfe eines connect() Konstruktors
hergestellt werden, der ein Connection Objekt zurückgibt. Die Argumente für diesen Konstruktor
sind datenbankabhängig. In den datenbankspezifischen Themen finden Sie die relevanten
Argumente.
import MyDBAPI
con = MyDBAPI.connect(*database_dependent_args)
1: schließen
con.close()
Schließt die Verbindung sofort. Beachten Sie, dass die Verbindung automatisch geschlossen wird,
wenn die Connection.__del___ Methode aufgerufen wird. Alle ausstehenden Transaktionen werden
implizit zurückgesetzt.
https://riptutorial.com/de/home 173
2: begehen
con.commit()
3: Rollback
con.rollback()
Rollt zum Beginn einer ausstehenden Transaktion zurück. Mit anderen Worten: Dies bricht jede
nicht festgeschriebene Transaktion in der Datenbank ab.
4: Cursor
cur = con.cursor()
Gibt ein Cursor Objekt zurück. Damit werden Transaktionen in der Datenbank ausgeführt.
Sqlalchemy verwenden
url = URL(drivername='mysql',
username='user',
password='passwd',
host='host',
database='db')
Jetzt kann diese Engine verwendet werden: zB mit Pandas, um Dataframes direkt von MySQL
abzurufen
import pandas as pd
con = engine.connect()
dataframe = pd.read_sql(sql=query, con=con)
https://riptutorial.com/de/home 174
Kapitel 37: Datenserialisierung
Syntax
• unpickled_string = pickle.loads (string)
• unpickled_string = pickle.load (file_object)
• pickled_string = pickle.dumps ([('', 'cmplx'), {('object',): Keine}],
pickle.HIGHEST_PROTOCOL)
• pickle.dump (('', 'cmplx'), {('object',): Keine}], file_object, pickle.HIGHEST_PROTOCOL)
• unjsoned_string = json.loads (string)
• unjsoned_string = json.load (file_object)
• jsoned_string = json.dumps (('a', 'b', 'c', [1, 2, 3]))
• json.dump (('a', 'b', 'c', [1, 2, 3]), file_object)
Parameter
Parameter Einzelheiten
Verwendung von pickle oder cPickle , ist es die Methode , die Objekte werden
Serialized / deserialisiert. pickle.HIGHEST_PROTOCOL möchten
protocol
pickle.HIGHEST_PROTOCOL hier pickle.HIGHEST_PROTOCOL , was die neueste Methode
bedeutet.
Bemerkungen
Warum JSON verwenden?
• Sprachübergreifende Unterstützung
• Für Menschen lesbar
• Anders als bei Pickle besteht keine Gefahr, beliebigen Code auszuführen
Warum Pickle?
https://riptutorial.com/de/home 175
Examples
Serialisierung mit JSON
Unterstützte Datentypen: int , float , boolean , string , list und dict . Weitere Informationen finden
Sie unter -> JSON-Wiki
Hier ist ein Beispiel, das die grundlegende Verwendung von JSON veranschaulicht : -
import json
# Dumping it to file
with open('families.json', 'w') as json_file:
json.dump(families, json_file)
Hier ist ein Beispiel, das die grundlegende Verwendung von Pickle demonstriert: -
# Importing pickle
try:
import cPickle as pickle # Python 2
except ImportError:
import pickle # Python 3
def __str__(self):
return ' '.join(self.sons)
# Dumping to string
pickle_data = pickle.dumps(my_family, pickle.HIGHEST_PROTOCOL)
https://riptutorial.com/de/home 176
# Dumping to file
with open('family.p', 'w') as pickle_file:
pickle.dump(families, pickle_file, pickle.HIGHEST_PROTOCOL)
https://riptutorial.com/de/home 177
Kapitel 38: Datenserialisierung von Pickles
Syntax
• pickle.dump (Objekt, Datei, Protokoll) #So serialisiert ein Objekt
Parameter
Parameter Einzelheiten
Protokoll Das zum Beizen des Objekts verwendete Protokoll (optionaler Parameter)
Bemerkungen
Pickleable Typen
Die folgenden Objekte sind picklierbar.
Examples
Verwenden von Pickle zum Serialisieren und Deserialisieren eines Objekts
Das pickle Modul implementiert einen Algorithmus zum Umwandeln eines beliebigen Python-
Objekts in eine Reihe von Bytes. Dieser Vorgang wird auch als Serialisierung des Objekts
bezeichnet. Der das Objekt repräsentierende Byte-Datenstrom kann dann übertragen oder
gespeichert und später rekonstruiert werden, um ein neues Objekt mit denselben Eigenschaften
zu erstellen.
Für den einfachsten Code verwenden wir die Funktionen dump() und load() .
https://riptutorial.com/de/home 179
serialized_data = pickle.dumps(data, pickle.HIGHEST_PROTOCOL)
# type(serialized_data) is bytes
deserialized_data = pickle.loads(serialized_data)
# deserialized_data == data
Einige Daten können nicht gebeizt werden. Andere Daten sollten aus anderen Gründen nicht
gepickt werden.
Was __getstate__ wird, kann in der __getstate__ Methode definiert werden. Diese Methode muss
etwas Pickelbares zurückgeben.
Auf der gegenüberliegenden Seite ist __setstate__ : Er erhält das, was __getstate__ erstellt hat,
und muss das Objekt initialisieren.
class A(object):
def __init__(self, important_data):
self.important_data = important_data
def __getstate__(self):
return [self.important_data] # only this is needed
Die Implementierung hier enthält eine Liste mit einem Wert: [self.important_data] . Das war nur
ein Beispiel, __getstate__ hätte alles zurückgeben können, was picklierbar ist, solange
__setstate__ weiß, wie die Gegenseite zu tun ist. Eine gute Alternative ist ein Wörterbuch aller
https://riptutorial.com/de/home 180
Werte: {'important_data': self.important_data} .
Konstruktor wird nicht aufgerufen! Beachten Sie, dass im vorherigen Beispiel a2 in pickle.loads
ohne dass A.__init__ A.__setstate__ musste A.__setstate__ alles initialisieren, das __init__
initialisiert hätte, wenn es aufgerufen würde.
https://riptutorial.com/de/home 181
Kapitel 39: Datenvisualisierung mit Python
Examples
Matplotlib
Matplotlib ist eine mathematische Plotterbibliothek für Python, die eine Vielzahl verschiedener
Plotfunktionen bietet.
Die Matplotlib-Dokumentation finden Sie hier , die SO-Dokumente stehen hier zur
Verfügung.
Matplotlib bietet zwei verschiedene Methoden zum Plotten, die jedoch größtenteils austauschbar
sind:
• Erstens bietet matplotlib die pyplot Schnittstelle, eine direkte und einfach zu verwendende
Schnittstelle, die das pyplot komplexer Diagramme in einem MATLAB-ähnlichen Stil
ermöglicht.
• Zweitens ermöglicht matplotlib dem Benutzer, die verschiedenen Aspekte (Achsen, Linien,
Hilfsstriche usw.) direkt über ein objektbasiertes System zu steuern. Dies ist schwieriger,
ermöglicht jedoch die vollständige Kontrolle über die gesamte Grafik.
Im Folgenden sehen Sie ein Beispiel für die Verwendung der pyplot Schnittstelle zum pyplot
einiger generierter Daten:
# Plot the data x, y with some keyword arguments that control the plot style.
# Use two different plot commands to plot both points (scatter) and a line (plot).
plt.scatter(x, y, c='blue', marker='x', s=100) # Create blue markers of shape "x" and size 100
plt.plot(x, y, color='red', linewidth=2) # Create a red line with linewidth 2.
https://riptutorial.com/de/home 182
Beachten Sie, dass plt.show() bekanntermaßen in einigen Umgebungen problematisch ist, weil
matplotlib.pyplot im interaktiven Modus ausgeführt wird. Wenn dies der Fall ist, kann das
Blockierungsverhalten explizit überschrieben werden, indem das optionale Argument
plt.show(block=True) , um das Problem zu mildern.
Seaborn
Seaborn ist eine Hülle um Matplotlib, die das Erstellen gemeinsamer statistischer Diagramme
vereinfacht. Die Liste der unterstützten Diagramme umfasst univariate und bivariate
Verteilungsdiagramme, Regressionsdiagramme und eine Reihe von Methoden zum Zeichnen
kategorialer Variablen. Die vollständige Liste der Grundstücke, die Seaborn bietet, finden Sie in
der API-Referenz .
Das Erstellen von Diagrammen in Seaborn ist so einfach wie das Aufrufen der entsprechenden
Grafikfunktion. Hier ein Beispiel zum Erstellen eines Histogramms, einer Schätzung der
Kerndichte und eines Rug-Plots für zufällig generierte Daten.
https://riptutorial.com/de/home 183
import seaborn as sns # common form of importing seaborn
Der Stil des Diagramms kann auch mit einer deklarativen Syntax gesteuert werden.
https://riptutorial.com/de/home 184
Als zusätzlicher Bonus können noch normale Matplotlib-Befehle auf Seaborn-Plots angewendet
werden. Hier ein Beispiel zum Hinzufügen von Achsentiteln zu unserem zuvor erstellten
Histogramm.
https://riptutorial.com/de/home 185
MayaVI
MayaVI ist nur in der Python 2.7x-Serie verfügbar! Es wird gehofft, bald in Python 3-x-Serie
verfügbar zu sein! (Obwohl einige Erfolge bei der Verwendung der Abhängigkeiten in
Python 3 zu verzeichnen sind)
Hier ist ein Beispieldiagramm, das mit MayaVI aus der Dokumentation erstellt wurde.
https://riptutorial.com/de/home 186
from numpy import sin, cos, mgrid, pi, sqrt
from mayavi import mlab
X = 2 / 3. * (cos(u) * cos(2 * v)
+ sqrt(2) * sin(u) * cos(v)) * cos(u) / (sqrt(2) -
sin(2 * u) * sin(3 * v))
Y = 2 / 3. * (cos(u) * sin(2 * v) -
sqrt(2) * sin(u) * sin(v)) * cos(u) / (sqrt(2)
- sin(2 * u) * sin(3 * v))
Z = -sqrt(2) * cos(u) * cos(u) / (sqrt(2) - sin(2 * u) * sin(3 * v))
S = sin(u)
Plotly
Plotly ist eine moderne Plattform zum Plotten und zur Datenvisualisierung. Plotly ist eine
Bibliothek für Python , R , JavaScript , Julia und MATLAB . Es kann auch als Webanwendung
mit diesen Sprachen verwendet werden.
Benutzer können die plotly-Bibliothek installieren und nach der Benutzerauthentifizierung offline
verwenden. Die Installation dieser Bibliothek und Offline - Authentifizierung ist gegeben hier . Die
Diagramme können auch in Jupyter Notebooks erstellt werden.
Die Verwendung dieser Bibliothek erfordert ein Konto mit Benutzername und Kennwort. Dadurch
wird der Arbeitsbereich zum Speichern von Plots und Daten in der Cloud bereitgestellt.
Die kostenlose Version der Bibliothek hat einige geringfügig eingeschränkte Funktionen und ist für
die Erstellung von 250 Plots pro Tag konzipiert. Die kostenpflichtige Version bietet alle
https://riptutorial.com/de/home 187
Funktionen, unbegrenzte Plot-Downloads und mehr privaten Datenspeicher. Für weitere Details
kann man die Hauptseite hier besuchen.
import plotly.graph_objs as go
import plotly as ply
N = 100
random_x = np.linspace(0, 1, N)
random_y0 = np.random.randn(N)+5
random_y1 = np.random.randn(N)
random_y2 = np.random.randn(N)-5
# Create traces
trace0 = go.Scatter(
x = random_x,
y = random_y0,
mode = 'lines',
name = 'lines'
)
trace1 = go.Scatter(
x = random_x,
y = random_y1,
mode = 'lines+markers',
name = 'lines+markers'
)
trace2 = go.Scatter(
x = random_x,
y = random_y2,
mode = 'markers',
name = 'markers'
)
data = [trace0, trace1, trace2]
ply.offline.plot(data, filename='line-mode')
https://riptutorial.com/de/home 188
Datenvisualisierung mit Python online lesen:
https://riptutorial.com/de/python/topic/2388/datenvisualisierung-mit-python
https://riptutorial.com/de/home 189
Kapitel 40: Datum und Uhrzeit
Bemerkungen
Python bietet sowohl integrierte Methoden als auch externe Bibliotheken zum Erstellen, Ändern,
Analysieren und Bearbeiten von Datum und Uhrzeit .
Examples
Parsen einer Zeichenfolge in ein Zeitzonenobjekt mit Zeitzone
Python 3.2+ unterstützt das %z Format, wenn eine Zeichenfolge in ein datetime Objekt datetime
wird.
UTC-Offset in der Form +HHMM oder -HHMM (leere Zeichenfolge, wenn das Objekt nicht
aktiv ist).
import datetime
dt = datetime.datetime.strptime("2016-04-15T08:27:18-0500", "%Y-%m-%dT%H:%M:%S%z")
Für andere Python-Versionen können Sie eine externe Bibliothek wie dateutil , wodurch das
Analysieren einer Zeichenfolge mit Zeitzone in ein datetime Objekt schnell ist.
import dateutil.parser
dt = dateutil.parser.parse("2016-04-15T08:27:18-0500")
Die Variable dt ist jetzt ein datetime Objekt mit dem folgenden Wert:
Einfache Datumsberechnung
Termine existieren nicht isoliert. Es ist üblich, dass Sie die Zeit zwischen den Datumsangaben
oder das Datum für morgen bestimmen müssen. Dies kann mit timedelta Objekten erreicht werden
import datetime
today = datetime.date.today()
print('Today:', today)
https://riptutorial.com/de/home 190
print('Time between tomorrow and yesterday:', tomorrow - yesterday)
Today: 2016-04-15
Yesterday: 2016-04-14
Tomorrow: 2016-04-16
Difference between tomorrow and yesterday: 2 days, 0:00:00
Das datetime-Modul enthält drei Haupttypen von Objekten - date, time und datetime.
import datetime
# Date object
today = datetime.date.today()
new_year = datetime.date(2017, 01, 01) #datetime.date(2017, 1, 1)
# Time object
noon = datetime.time(12, 0, 0) #datetime.time(12, 0)
# Current datetime
now = datetime.datetime.now()
# Datetime object
millenium_turn = datetime.datetime(2000, 1, 1, 0, 0, 0) #datetime.datetime(2000, 1, 1, 0, 0)
Arithmetische Operationen für diese Objekte werden nur innerhalb desselben Datentyps
unterstützt. Wenn Sie eine einfache Arithmetik mit Instanzen verschiedener Typen ausführen, wird
ein TypeError-Wert erzeugt.
# Do this instead
print('Time since the millenium at midnight: ',
datetime.datetime(today.year, today.month, today.day) - millenium_turn)
# Or this
print('Time since the millenium at noon: ',
datetime.datetime.combine(today, noon) - millenium_turn)
Manchmal möchten Sie einen Datumsbereich von einem Startdatum bis zu einem Enddatum
durchlaufen. Sie können dies mit einer datetime Bibliothek und einem timedelta tun:
https://riptutorial.com/de/home 191
import datetime
start_date = datetime.date.today()
end_date = start_date + 7*day_delta
Was produziert:
2016-07-21
2016-07-22
2016-07-23
2016-07-24
2016-07-25
2016-07-26
2016-07-27
Wenn Sie die dateutil Bibliothek wie im vorherigen Beispiel zum Analysieren von Zeitzonen mit
Zeitzonen verwenden , ist es auch möglich, Zeitmarken mit einem angegebenen "kurzen"
Zeitzonennamen zu parsen.
Für Datumsangaben, die mit kurzen Zeitzonennamen oder Abkürzungen formatiert sind, die im
Allgemeinen mehrdeutig sind (z. B. CST, z. B. Central Standard Time, China Standard Time,
Cuba Standard Time usw.) - weitere Informationen finden Sie hier , ist es erforderlich, eine
Zuordnung zwischen der Abkürzung für die Zeitzone und dem tzinfo Objekt tzinfo .
ET = tz.gettz('US/Eastern')
CT = tz.gettz('US/Central')
MT = tz.gettz('US/Mountain')
PT = tz.gettz('US/Pacific')
dt_est
# datetime.datetime(2014, 1, 2, 4, 0, tzinfo=tzfile('/usr/share/zoneinfo/US/Eastern'))
dt_pst
https://riptutorial.com/de/home 192
# datetime.datetime(2016, 3, 11, 16, 0, tzinfo=tzfile('/usr/share/zoneinfo/US/Pacific'))
Es ist erwähnenswert, dass bei Verwendung einer pytz Zeitzone mit dieser Methode diese nicht
richtig lokalisiert wird:
EST = pytz.timezone('America/New_York')
dt = parse('2014-02-03 09:17:00 EST', tzinfos={'EST': EST})
Wenn Sie diese Methode verwenden, sollten Sie nach dem Parsen wahrscheinlich den naiven Teil
der datetime neu localize :
dt_fixed = dt.tzinfo.localize(dt.replace(tzinfo=None))
dt_fixed.tzinfo # Now it's EST.
# <DstTzInfo 'America/New_York' EST-1 day, 19:00:00 STD>)
Standardmäßig sind alle datetime Objekte nicht aktiv. Um sie tzinfo zu machen, müssen Sie ein
tzinfo Objekt anhängen, das den UTC-Offset und die Zeitzonenabkürzung als Funktion von
Datum und Uhrzeit bereitstellt.
Für Zeitzonen, die einen festen Versatz von UTC haben, stellt das Modul datetime in Python 3.2
und datetime die timezone bereit, eine konkrete Implementierung von tzinfo , die ein Zeit- timedelta
und einen (optionalen) Namensparameter benötigt:
print(dt.tzname())
# UTC+09:00
Für Python-Versionen vor 3.2 ist es erforderlich, eine Drittanbieter-Bibliothek wie dateutil .
https://riptutorial.com/de/home 193
dateutilstellt eine äquivalente Klasse, tzoffset , zur tzoffset , die (ab Version 2.5.3) Argumente
der Form dateutil.tz.tzoffset(tzname, offset) , wobei der offset in Sekunden angegeben wird:
Neben statischen Zeitzonen bietet dateutil Zeitzonen-Klassen, die Sommerzeit verwenden (siehe
Dokumentation zum tz Modul ). Mit der Methode tz.gettz() Sie ein Zeitzonenobjekt datetime , das
direkt an den datetime Konstruktor übergeben werden kann:
VORSICHT : Seit Version 2.5.3 verarbeitet dateutil mehrdeutige Datumsangaben nicht korrekt
und verwendet immer das spätere Datum. Es ist nicht möglich, ein Objekt mit einer dateutil
Zeitzone zu dateutil , die beispielsweise 2015-11-01 1:30 EDT-4 , da dies während einer
Sommerzeitumstellung erfolgt.
Bei Verwendung von pytz alle Kantenfälle ordnungsgemäß pytz . pytz Zeitzonen sollten jedoch
nicht direkt durch den Konstruktor an Zeitzonen angehängt werden. Stattdessen sollte eine pytz
Zeitzone mit der localize Methode der Zeitzone angefügt werden:
https://riptutorial.com/de/home 194
PT = pytz.timezone('US/Pacific')
dt_pst = PT.localize(datetime(2015, 1, 1, 12))
dt_pdt = PT.localize(datetime(2015, 11, 1, 0, 30))
print(dt_pst)
# 2015-01-01 12:00:00-08:00
print(dt_pdt)
# 2015-11-01 00:30:00-07:00
Beachten Sie, dass Sie, wenn Sie eine Datums-Zeit-Arithmetik in einer pytz aware-Zeitzone
durchführen, entweder die Berechnungen in UTC durchführen müssen (wenn Sie absolut
abgelaufene Zeit wünschen) oder das Ergebnis mit normalize() aufrufen:
Es ist möglich, ein Datum aus einem Text mit dem dateutil Parser in einem "Fuzzy" -Modus zu
extrahieren, wobei Komponenten der Zeichenfolge, die nicht als Teil eines Datums erkannt
werden, ignoriert werden.
utc = tz.tzutc()
local = tz.tzlocal()
utc_now = datetime.utcnow()
utc_now # Not timezone-aware.
utc_now = utc_now.replace(tzinfo=utc)
utc_now # Timezone-aware.
local_now = utc_now.astimezone(local)
local_now # Converted to local time.
https://riptutorial.com/de/home 195
Parsen eines beliebigen ISO 8601-Zeitstempels mit minimalen Bibliotheken
Python unterstützt die Analyse von Zeitstempeln nach ISO 8601 nur eingeschränkt. Für strptime
Sie genau wissen, in welchem Format es sich befindet. Als Komplikation ist die Stringifizierung
einer datetime ein Zeitstempel nach ISO 8601 mit Leerzeichen als Trennzeichen und 6-stelligem
Bruch:
Diese beiden Formulare benötigen jedoch ein anderes Format für die strptime . Darüber hinaus
unterstützt strptime' does not support at all parsing minute timezones that have a Folgendes
enthalten: in it, thus 2016-07-22 09: 25: 59 + 0300 can be parsed, but the standard format 2016-
07-22 09:25:59 +03: 00` kann nicht.
Es gibt eine Einzeldateibibliothek namens iso8601 die nur Zeitstempel von ISO 8601 und nur sie
richtig analysiert.
Es unterstützt Brüche und Zeitzonen und das T Trennzeichen mit einer einzigen Funktion:
import iso8601
iso8601.parse_date('2016-07-22 09:25:59')
# datetime.datetime(2016, 7, 22, 9, 25, 59, tzinfo=<iso8601.Utc>)
iso8601.parse_date('2016-07-22 09:25:59+03:00')
# datetime.datetime(2016, 7, 22, 9, 25, 59, tzinfo=<FixedOffset '+03:00' ...>)
iso8601.parse_date('2016-07-22 09:25:59Z')
# datetime.datetime(2016, 7, 22, 9, 25, 59, tzinfo=<iso8601.Utc>)
iso8601.parse_date('2016-07-22T09:25:59.000111+03:00')
# datetime.datetime(2016, 7, 22, 9, 25, 59, 111, tzinfo=<FixedOffset '+03:00' ...>)
Wenn keine Zeitzone eingestellt ist, wird der iso8601.parse_date auf UTC gesetzt. Die
Standardzone kann mit default_zone Schlüsselwortargument default_zone geändert werden.
Bemerkenswert ist , wenn dies None anstelle des Standard, dann werden diese Zeitstempel , die
stattdessen als naive Datetimes keine explizite Zeitzone haben werden zurückgegeben:
iso8601.parse_date('2016-07-22T09:25:59', default_timezone=None)
# datetime.datetime(2016, 7, 22, 9, 25, 59)
iso8601.parse_date('2016-07-22T09:25:59Z', default_timezone=None)
# datetime.datetime(2016, 7, 22, 9, 25, 59, tzinfo=<iso8601.Utc>)
Das datetime Modul kann einen POSIX- timestamp in ein ITC- datetime Objekt datetime .
https://riptutorial.com/de/home 196
import time
from datetime import datetime
seconds_since_epoch=time.time() #1469182681.709
import calendar
from datetime import date
import datetime
import dateutil.relativedelta
d = datetime.datetime.strptime("2013-03-31", "%Y-%m-%d")
d2 = d - dateutil.relativedelta.relativedelta(months=1) #datetime.datetime(2013, 2, 28, 0, 0)
Zeitunterschiede berechnen
Das timedelta Modul ist nützlich, um Unterschiede zwischen den Zeiten zu berechnen:
Die Angabe der Uhrzeit ist optional, wenn ein neues datetime Objekt erstellt wird
delta = now-then
print(delta.days)
# 60
print(delta.seconds)
# 40826
Um einen Tag nach dem Tag und einen Tag vor dem Datum zu erhalten, könnten wir Folgendes
verwenden:
https://riptutorial.com/de/home 197
n Tag nach dem Datum:
datetime.now().isoformat()
# Out: '2016-07-31T23:08:20.886783'
datetime.now(tzlocal()).isoformat()
# Out: '2016-07-31T23:09:43.535074-07:00'
datetime.now(tzlocal()).replace(microsecond=0).isoformat()
# Out: '2016-07-31T23:10:30-07:00'
Siehe ISO 8601 für weitere Informationen über die ISO 8601 - Format.
https://riptutorial.com/de/home 198
Kapitel 41: Datumsformatierung
Examples
Zeit zwischen zwei Datumszeiten
a = datetime(2016,10,06,0,0,0)
b = datetime(2016,10,01,23,59,59)
a-b
# datetime.timedelta(4, 1)
(a-b).days
# 4
(a-b).total_seconds()
# 518399.0
https://riptutorial.com/de/home 199
Kapitel 42: Debuggen
Examples
Der Python-Debugger: Schrittweises Debuggen mit _pdb_
Die Python Standard Library enthält eine interaktive Debugging-Bibliothek namens pdb . pdb
verfügt über umfangreiche Funktionen, wobei die am häufigsten verwendete Möglichkeit ist, ein
Programm schrittweise durchzugehen .
Dadurch wird der Debugger in der ersten Zeile des Programms gestartet.
Normalerweise möchten Sie einen bestimmten Abschnitt des Codes für das Debugging
verwenden. Dazu importieren wir die pdb-Bibliothek und unterbrechen mit set_trace () den Fluss
dieses problematischen Beispielcodes.
import pdb
print divide(1, 2)
Wenn Sie dieses Programm ausführen, wird der interaktive Debugger gestartet.
python foo.py
> ~/scratch/foo.py(5)divide()
-> return a/b
(Pdb)
Häufig wird dieser Befehl in einer Zeile verwendet, sodass er mit einem einzelnen # -Zeichen
auskommentiert werden kann
Bei der Eingabeaufforderung (Pdb) können Befehle eingegeben werden. Diese Befehle können
Debugger-Befehle oder Python sein. Um Variablen zu drucken, können wir p aus dem Debugger
oder den Python- Druck verwenden .
(Pdb) p a
1
(Pdb) print a
https://riptutorial.com/de/home 200
1
locals
eingebaute Funktion
Hinweis:
Wenn einer Ihrer Variablennamen mit den Debugger-Befehlen übereinstimmt, verwenden Sie ein
Ausrufezeichen ' ! 'vor dem var, um explizit auf die Variable und nicht auf den Debuggerbefehl zu
verweisen. Beispielsweise kann es oft vorkommen, dass Sie den Variablennamen ' c ' für einen
Zähler verwenden und Sie ihn möglicherweise im Debugger drucken möchten. Ein einfacher ' c' -
Befehl würde die Ausführung bis zum nächsten Haltepunkt fortsetzen. Verwenden Sie stattdessen
' ! C ', um den Wert der Variablen wie folgt zu drucken:
(Pdb) !c
https://riptutorial.com/de/home 201
4
Wenn IPython (oder Jupyter ) installiert ist, kann der Debugger folgendermaßen aufgerufen
werden:
import ipdb
ipdb.set_trace()
/home/usr/ook.py(3)<module>()
1 import ipdb
2 ipdb.set_trace()
----> 3 print("Hello world!")
ipdb>
Das bedeutet natürlich, dass man den Code bearbeiten muss. Es gibt einen einfacheren Weg:
Dies bewirkt, dass der Debugger aufgerufen wird, wenn eine nicht erfasste Ausnahme ausgelöst
wird.
Remote-Debugger
rpdbmüssen Sie Python-Code debuggen, der von einem anderen Prozess ausgeführt wird. In
diesem Fall ist rpdb .
rpdb ist ein Wrapper um pdb, der stdin und stdout zu einem Socket-Handler umleitet.
Standardmäßig wird der Debugger an Port 4444 geöffnet
Verwendungszweck:
Und dann müssen Sie dies im Terminal ausführen, um eine Verbindung zu diesem Prozess
herzustellen.
https://riptutorial.com/de/home 202
> /home/usr/ook.py(3)<module>()
-> print("Hello world!")
(Pdb)
https://riptutorial.com/de/home 203
Kapitel 43: Dekorateure
Einführung
Decorator-Funktionen sind Software-Designmuster. Sie ändern die Funktionalität einer Funktion,
Methode oder Klasse dynamisch, ohne dass Sie Unterklassen direkt verwenden oder den
Quellcode der dekorierten Funktion ändern müssen. Bei richtiger Anwendung können Dekorateure
zu mächtigen Werkzeugen im Entwicklungsprozess werden. Dieses Thema behandelt die
Implementierung und Anwendung von Decorator-Funktionen in Python.
Syntax
• def decorator_function (f): pass # definiert einen Dekorateur mit dem Namen
decorator_function
• @decorator_function
def decor_function (): pass # Die Funktion ist jetzt mit decorator_function umschlossen
(dekoriert mit)
Parameter
Parameter Einzelheiten
Examples
Dekorateurfunktion
Dekorateure verbessern das Verhalten anderer Funktionen oder Methoden. Jede Funktion, die
eine Funktion als Parameter übernimmt und eine erweiterte Funktion zurückgibt, kann als
Dekorator verwendet werden .
# This simplest decorator does nothing to the function being decorated. Such
# minimal decorators can occasionally be used as a kind of code markers.
def super_secret_function(f):
return f
@super_secret_function
def my_function():
print("This is my secret function.")
https://riptutorial.com/de/home 204
Die @ -Notation ist ein syntaktischer Zucker, der dem folgenden entspricht:
my_function = super_secret_function(my_function)
Es ist wichtig, dies zu beachten, um zu verstehen, wie die Dekorateure arbeiten. Diese
"ungezugte" Syntax macht deutlich, warum die Decorator-Funktion eine Funktion als Argument
verwendet und warum sie eine andere Funktion zurückgeben soll. Es zeigt auch, was passiert,
wenn Sie keine Funktion zurückgeben:
def disabled(f):
"""
This function returns nothing, and hence removes the decorated function
from the local scope.
"""
pass
@disabled
def my_function():
print("This function can no longer be called...")
my_function()
# TypeError: 'NoneType' object is not callable
Daher definieren wir normalerweise eine neue Funktion im Dekorateur und geben sie zurück.
Diese neue Funktion würde zuerst etwas tun, was sie tun muss, dann die ursprüngliche Funktion
aufrufen und schließlich den Rückgabewert verarbeiten. Betrachten Sie diese einfache
Dekorationsfunktion, die die Argumente druckt, die die ursprüngliche Funktion empfängt, und sie
dann aufruft.
@print_args
def multiply(num_a, num_b):
return num_a * num_b
print(multiply(3, 5))
#Output:
# (3,5) - This is actually the 'args' that the function receives.
# {} - This is the 'kwargs', empty because we didn't specify keyword arguments.
# 15 - The result of the function.
Dekorateur Klasse
Wie in der Einleitung erwähnt, ist ein Dekorateur eine Funktion, die auf eine andere Funktion
angewendet werden kann, um ihr Verhalten zu verbessern. Der syntaktische Zucker entspricht
dem Folgenden: my_func = decorator(my_func) . Aber was wäre, wenn der decorator stattdessen
eine Klasse wäre? Die Syntax würde weiterhin funktionieren, mit der Ausnahme, dass my_func jetzt
https://riptutorial.com/de/home 205
durch eine Instanz der decorator Klasse ersetzt wird. Wenn diese Klasse die magische Methode
__call__() implementiert, ist es weiterhin möglich, my_func als Funktion zu verwenden:
class Decorator(object):
"""Simple decorator class."""
@Decorator
def testfunc():
print('Inside the function.')
testfunc()
# Before the function call.
# Inside the function.
# After the function call.
Beachten Sie, dass eine mit einem Klassendekorateur dekorierte Funktion aus Sicht der
Typenprüfung nicht mehr als "Funktion" betrachtet wird:
import types
isinstance(testfunc, types.FunctionType)
# False
type(testfunc)
# <class '__main__.Decorator'>
Dekorationsmethoden
Für Dekorationsmethoden müssen Sie eine zusätzliche __get__ Methode definieren:
class Decorator(object):
def __init__(self, func):
self.func = func
class Test(object):
@Decorator
def __init__(self):
pass
https://riptutorial.com/de/home 206
a = Test()
Im Dekorateur.
Warnung!
Klassendekorateure erzeugen nur eine Instanz für eine bestimmte Funktion, so dass das
Dekorieren einer Methode mit einem Klassendekorateur denselben Dekorator für alle Instanzen
dieser Klasse verwendet:
class CountCallsDecorator(object):
def __init__(self, func):
self.func = func
self.ncalls = 0 # Number of calls of this method
class Test(object):
def __init__(self):
pass
@CountCallsDecorator
def do_something(self):
return 'something was done'
a = Test()
a.do_something()
a.do_something.ncalls # 1
b = Test()
b.do_something()
b.do_something.ncalls # 2
Dekorateure entfernen normalerweise Funktionsmetadaten, da sie nicht gleich sind. Dies kann zu
Problemen führen, wenn Meta-Programme für den dynamischen Zugriff auf Funktionsmetadaten
verwendet werden. Metadaten enthalten auch die Dokumentzeichenfolgen und den Namen der
Funktion. functools.wraps lässt die dekorierte Funktion wie die ursprüngliche Funktion aussehen,
indem sie mehrere Attribute in die Wrapper-Funktion kopiert.
Die beiden Methoden zum Umwickeln eines Dekorateurs erreichen beim Verbergen der
ursprünglichen Funktion dasselbe. Es gibt keinen Grund, die Funktionsversion der Klassenversion
https://riptutorial.com/de/home 207
vorzuziehen, es sei denn, Sie verwenden bereits eine Version über der anderen.
@decorator
def test():
pass
test.__name__
'Prüfung'
@Decorator
def test():
"""Docstring of test."""
pass
test.__doc__
Ein Dekorateur hat nur ein Argument: die zu dekorierende Funktion. Es gibt keine Möglichkeit,
andere Argumente zu übergeben.
Zusätzliche Argumente sind jedoch oft erwünscht. Der Trick besteht darin, eine Funktion zu
erstellen, die willkürliche Argumente verwendet und einen Dekorator zurückgibt.
Dekorateurfunktionen
https://riptutorial.com/de/home 208
def decoratorfactory(message):
def decorator(func):
def wrapped_func(*args, **kwargs):
print('The decorator wants to tell you: {}'.format(message))
return func(*args, **kwargs)
return wrapped_func
return decorator
@decoratorfactory('Hello World')
def test():
pass
test()
Wichtige Notiz:
Bei solchen Dekorateurfabriken müssen Sie den Dekorateur mit einem Paar Klammern anrufen:
test()
Dekorateur Klassen
def decoratorfactory(*decorator_args, **decorator_kwargs):
class Decorator(object):
def __init__(self, func):
self.func = func
return Decorator
@decoratorfactory(10)
def test():
pass
test()
https://riptutorial.com/de/home 209
Ein Singleton ist ein Muster, das die Instantiierung einer Klasse auf eine Instanz / ein Objekt
beschränkt. Mit einem Dekorator können wir eine Klasse als Singleton definieren, indem die
Klasse gezwungen wird, entweder eine vorhandene Instanz der Klasse zurückzugeben oder eine
neue Instanz zu erstellen (falls diese nicht existiert).
def singleton(cls):
instance = [None]
def wrapper(*args, **kwargs):
if instance[0] is None:
instance[0] = cls(*args, **kwargs)
return instance[0]
return wrapper
Dieser Dekorator kann zu jeder Klassendeklaration hinzugefügt werden und stellt sicher, dass
höchstens eine Instanz der Klasse erstellt wird. Alle nachfolgenden Aufrufe geben die bereits
vorhandene Klasseninstanz zurück.
@singleton
class SomeSingletonClass:
x = 2
def __init__(self):
print("Created!")
instance.x = 3
print(SomeSingletonClass().x) # 3
Es ist also egal, ob Sie über Ihre lokale Variable auf die Klasseninstanz verweisen oder eine
andere "Instanz" erstellen, Sie erhalten immer dasselbe Objekt.
import time
def timer(func):
def inner(*args, **kwargs):
t1 = time.time()
f = func(*args, **kwargs)
t2 = time.time()
print 'Runtime took {0} seconds'.format(t2-t1)
return f
return inner
@timer
def example_function():
#do stuff
example_function()
https://riptutorial.com/de/home 210
Kapitel 44: Deque-Modul
Syntax
• dq = deque () # Erzeugt ein leeres Deque
• dq = deque (iterable) # Erzeugt einen Deque mit einigen Elementen
• dq.append (object) # Fügt ein Objekt rechts von der Deque hinzu
• dq.appendleft (object) # Fügt ein Objekt links vom Deque hinzu
• dq.pop () -> object # Entfernt das Objekt ganz rechts und gibt es zurück
• dq.popleft () -> object # Entfernt das linke Objekt und gibt es zurück
• dq.extend (iterable) # Fügt einige Elemente rechts vom Deque hinzu
• dq.extendleft (iterable) # Fügt einige Elemente links vom Deque hinzu
Parameter
Parameter Einzelheiten
Erzeugt den Deque mit ursprünglichen Elementen, die von einem anderen
iterable
iterierbaren Element kopiert wurden.
Begrenzt, wie groß der Deque sein kann, wobei alte Elemente als neue
maxlen
ausgegeben werden.
Bemerkungen
Diese Klasse ist nützlich, wenn Sie ein Objekt benötigen, das einer Liste ähnelt, die schnelle
Anhänge- und Popoperationen von beiden Seiten zulässt (der Name deque steht für " double-
ended queue ").
Die zur Verfügung gestellten Methoden sind in der Tat sehr ähnlich, mit der Ausnahme, dass
einige wie pop , append oder extend mit left . Die deque Datenstruktur sollte einer Liste vorgezogen
werden, wenn Elemente an beiden Enden häufig eingefügt und gelöscht werden müssen, da dies
zu einer konstanten Zeit O (1) möglich ist.
Examples
Basic Deque mit
Die wichtigsten Methoden, die für diese Klasse nützlich sind, sind popleft und appendleft
d = deque([1, 2, 3])
p = d.popleft() # p = 1, d = deque([2, 3])
https://riptutorial.com/de/home 211
d.appendleft(5) # d = deque([5, 2, 3])
Verwenden Sie den Parameter maxlen , während Sie eine Deque erstellen, um die Größe der
Deque zu begrenzen:
Mit dem Element .pop() wird ein Element auf der rechten Seite entfernt:
Verwenden .popleft() Elements .popleft() zum Entfernen eines Elements von der linken Seite:
https://riptutorial.com/de/home 212
Element nach seinem Wert entfernen:
Wir können nun die Entfernungen von einer Startposition aus finden:
>>> bfs(graph, 1)
{1: 0, 2: 1, 3: 1, 4: 2, 5: 2}
>>> bfs(graph, 3)
{3: 0, 4: 1, 5: 1}
https://riptutorial.com/de/home 213
Kapitel 45: Der Dolmetscher
(Befehlszeilenkonsole)
Examples
Allgemeine Hilfe anfordern
Wenn die help in der Konsole ohne Argumente aufgerufen wird, bietet Python eine interaktive
Hilfskonsole, in der Sie Informationen zu Python-Modulen, Symbolen, Schlüsselwörtern usw.
erhalten.
>>> help()
If this is your first time using Python, you should definitely check out
the tutorial on the Internet at http://docs.python.org/3.4/tutorial/.
Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules. To quit this help utility and
return to the interpreter, just type "quit".
Verwenden Sie einen Unterstrich _ um den Wert des letzten Ergebnisses aus Ihrem letzten
Ausdruck in der Konsole zu erhalten.
>>> 2 + 2
4
>>> _
4
>>> _ + 6
10
Dieser magische Unterstrichwert wird nur aktualisiert, wenn ein Python-Ausdruck verwendet wird,
der einen Wert ergibt. Das Definieren von Funktionen oder für Schleifen ändert den Wert nicht.
Wenn der Ausdruck eine Ausnahme auslöst, werden keine Änderungen an _ .
https://riptutorial.com/de/home 214
>>> _
'Hello, World'
>>> 27 / 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> _
'Hello, World'
Denken Sie daran, dass diese magische Variable nur im interaktiven Python-Interpreter verfügbar
ist. Das Ausführen von Skripts führt dies nicht aus.
Die Konsole für die Hauptversion von Python kann normalerweise geöffnet werden, indem Sie in
Ihre Windows-Konsole py oder auf anderen Plattformen python eingeben.
$ py
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Wenn Sie über mehrere Versionen verfügen, werden ihre ausführbaren Dateien standardmäßig
python2 bzw. python3 .
Die PYTHONSTARTUP-Variable
Wenn die PYTHONSTARTUP-Variable auf den Speicherort einer Datei gesetzt wurde, die
Folgendes enthält:
print("Welcome!")
Das Öffnen der Python-Konsole würde dann zu dieser zusätzlichen Ausgabe führen:
$ py
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Welcome!
>>>
Kommandozeilenargumente
https://riptutorial.com/de/home 215
Python Launcher
Launcher arguments:
usage: G:\Python34\python.exe [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-b : issue warnings about str(bytes_instance), str(bytearray_instance)
and comparing bytes/bytearray with str. (-bb: issue errors)
-B : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x
-c cmd : program passed in as string (terminates option list)
-d : debug output from parser; also PYTHONDEBUG=x
-E : ignore PYTHON* environment variables (such as PYTHONPATH)
-h : print this help message and exit (also --help)
-i : inspect interactively after running script; forces a prompt even
if stdin does not appear to be a terminal; also PYTHONINSPECT=x
-I : isolate Python from the user's environment (implies -E and -s)
-m mod : run library module as a script (terminates option list)
-O : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x
-OO : remove doc-strings in addition to the -O optimizations
-q : don't print version and copyright messages on interactive startup
-s : don't add user site directory to sys.path; also PYTHONNOUSERSITE
-S : don't imply 'import site' on initialization
-u : unbuffered binary stdout and stderr, stdin always buffered;
also PYTHONUNBUFFERED=x
see man page for details on internal buffering relating to '-u'
-v : verbose (trace import statements); also PYTHONVERBOSE=x
can be supplied multiple times to increase verbosity
-V : print the Python version number and exit (also --version)
-W arg : warning control; arg is action:message:category:module:lineno
also PYTHONWARNINGS=arg
-x : skip first line of source, allowing use of non-Unix forms of #!cmd
-X opt : set implementation-specific option
file : program read from script file
- : program read from stdin (default; interactive mode if a tty)
arg ...: arguments passed to program in sys.argv[1:]
https://riptutorial.com/de/home 216
Die Python-Konsole fügt eine neue Funktion hinzu, help , mit der Informationen zu einer Funktion
oder einem Objekt abgerufen werden können.
Bei einer Funktion druckt help seine Signatur (Argumente) und seinen Docstring, falls die Funktion
eine hat.
>>> help(print)
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Für ein Objekt listet help die Dokumentzeichenfolge des Objekts und die verschiedenen
Elementfunktionen auf, die das Objekt hat.
>>> x = 2
>>> help(x)
Help on int object:
class int(object)
| int(x=0) -> integer
| int(x, base=10) -> integer
|
| Convert a number or string to an integer, or return 0 if no arguments
| are given. If x is a number, return x.__int__(). For floating point
| numbers, this truncates towards zero.
|
| If x is not a number or if base is given, then x must be a string,
| bytes, or bytearray instance representing an integer literal in the
| given base. The literal can be preceded by '+' or '-' and be surrounded
| by whitespace. The base defaults to 10. Valid bases are 0 and 2-36.
| Base 0 means to interpret the base from the string as an integer literal.
| >>> int('0b100', base=0)
| 4
|
| Methods defined here:
|
| __abs__(self, /)
| abs(self)
|
| __add__(self, value, /)
| Return self+value...
https://riptutorial.com/de/home 217
Kapitel 46: Designmuster
Einführung
Ein Entwurfsmuster ist eine allgemeine Lösung für ein häufig auftretendes Problem in der
Softwareentwicklung. In diesem Dokumentationsthema werden Beispiele für gängige
Entwurfsmuster in Python beschrieben.
Examples
Strategiemuster
Dieses Entwurfsmuster wird Strategiemuster genannt. Es wird verwendet, um eine Familie von
Algorithmen zu definieren, jeden zu kapseln und austauschbar zu machen. Das
Strategieentwurfsmuster lässt einen Algorithmus unabhängig von den Kunden variieren, die ihn
verwenden.
Zum Beispiel können Tiere auf viele verschiedene Arten "laufen". Gehen kann als eine Strategie
betrachtet werden, die von verschiedenen Tierarten umgesetzt wird:
class Animal(object):
def walk(self):
"""
Cause animal instance to walk
# Here are some different walking algorithms that can be used with Animal
def snake_walk(self):
print('I am slithering side to side because I am a {}.'.format(self.name))
def four_legged_animal_walk(self):
print('I am using all four of my legs to walk because I am a(n) {}.'.format(
self.name))
def two_legged_animal_walk(self):
print('I am standing up on my two legs to walk because I am a {}.'.format(
https://riptutorial.com/de/home 218
self.name))
generic_animal = Animal()
king_cobra = Animal(name='King Cobra', walk=snake_walk)
elephant = Animal(name='Elephant', walk=four_legged_animal_walk)
kangaroo = Animal(name='Kangaroo', walk=two_legged_animal_walk)
kangaroo.walk()
elephant.walk()
king_cobra.walk()
# This one will Raise a NotImplementedError to let the programmer
# know that the walk method is intended to be used as a strategy.
generic_animal.walk()
# OUTPUT:
#
# I am standing up on my two legs to walk because I am a Kangaroo.
# I am using all four of my legs to walk because I am a(n) Elephant.
# I am slithering side to side because I am a King Cobra.
# Traceback (most recent call last):
# File "./strategy.py", line 56, in <module>
# generic_animal.walk()
# File "./strategy.py", line 30, in walk
# raise NotImplementedError(message)
# NotImplementedError: Animal should implement a walk method
Beachten Sie, dass in Sprachen wie C ++ oder Java dieses Muster mithilfe einer abstrakten
Klasse oder einer Schnittstelle implementiert wird, um eine Strategie zu definieren. In Python ist
es sinnvoller, nur einige Funktionen extern zu definieren, die mithilfe von types.MethodType
dynamisch zu einer Klasse types.MethodType .
Design Patterns bieten Lösungen für commonly occurring problems beim Softwaredesign. Die
Entwurfsmuster wurden zuerst von GoF(Gang of Four) in dem sie die häufig vorkommenden Muster
als Probleme beschrieben, die immer wieder auftreten, und Lösungen für diese Probleme.
1. The pattern name ist ein Handle, mit dem wir ein Designproblem, seine Lösungen und
Konsequenzen in ein oder zwei Worten beschreiben können.
2. The problem beschreibt, wann das Muster angewendet wird.
3. The solution beschreibt die Elemente, aus denen das Design besteht, sowie deren
Beziehungen, Verantwortlichkeiten und Kollaborationen.
4. The consequences sind die Ergebnisse und Kompromisse bei der Anwendung des Musters.
https://riptutorial.com/de/home 219
Architekten
4. Sie haben Zuverlässigkeit und Abhängigkeit
1. Kreationelles Muster
2. Strukturelles Muster
3. Verhaltensmuster
Creational Pattern - Sie befassen sich mit der Erstellung des Objekts und isolieren die Details der
Objekterstellung.
- Sie gestalten die Struktur von Klassen und Objekten so, dass sie
Structural Pattern
komponieren können, um größere Ergebnisse zu erzielen.
- Sie befassen sich mit der Interaktion zwischen Objekten und der
Behavioral Pattern
Verantwortung von Objekten.
Singleton-Muster :
Es handelt sich um eine Art creational pattern , das einen Mechanismus bereitstellt, um nur ein
und ein Objekt eines bestimmten Typs zu haben und einen globalen Zugangspunkt
bereitzustellen.
Implementierung
Wir können Singleton Pattern in Python implementieren, indem Sie nur eine Instanz der Singleton-
Klasse erstellen und dasselbe Objekt erneut bedienen.
class Singleton(object):
def __new__(cls):
# hasattr method checks if the class object an instance property or not.
if not hasattr(cls, 'instance'):
cls.instance = super(Singleton, cls).__new__(cls)
return cls.instance
s = Singleton()
print ("Object created", s)
s1 = Singleton()
print ("Object2 created", s1)
Ausgabe:
Beachten Sie, dass dieses Muster in Sprachen wie C ++ oder Java implementiert wird, indem Sie
den Konstruktor privat machen und eine statische Methode erstellen, die die Objektinitialisierung
https://riptutorial.com/de/home 220
durchführt. Auf diese Weise wird beim ersten Aufruf ein Objekt erstellt, und die Klasse gibt danach
dasselbe Objekt zurück. In Python haben wir jedoch keine Möglichkeit, private Konstruktoren zu
erstellen.
Fabrikmuster
Das Fabrikmuster ist auch ein Creational pattern . Der Begriff factory bedeutet, dass eine Klasse
für das Erstellen von Objekten anderer Typen verantwortlich ist. Es gibt eine Klasse, die als
Factory fungiert und mit Objekten und Methoden verknüpft ist. Der Client erstellt ein Objekt durch
Aufrufen der Methoden mit bestimmten Parametern. Factory erstellt das Objekt des gewünschten
Typs und gibt es an den Client zurück.
class Music():
__metaclass__ = ABCMeta
@abstractmethod
def do_play(self):
pass
class Mp3(Music):
def do_play(self):
print ("Playing .mp3 music!")
class Ogg(Music):
def do_play(self):
print ("Playing .ogg music!")
class MusicFactory(object):
def play_sound(self, object_type):
return eval(object_type)().do_play()
if __name__ == "__main__":
mf = MusicFactory()
music = input("Which music you want to play Mp3 or Ogg")
mf.play_sound(music)
Ausgabe:
MusicFactoryist hier die Factory-Klasse, die je nach Wahl des Benutzers entweder ein Objekt vom
Typ Mp3 oder Ogg .
Proxy
Proxy-Objekte werden häufig verwendet, um den geschützten Zugriff auf ein anderes Objekt
sicherzustellen. Diese interne Geschäftslogik möchten wir nicht mit Sicherheitsanforderungen
belasten.
Angenommen, wir möchten garantieren, dass nur Benutzer bestimmter Berechtigungen auf die
Ressource zugreifen können.
https://riptutorial.com/de/home 221
Proxy-Definition: (Es wird sichergestellt, dass nur Benutzer, die tatsächlich Reservierungen sehen
können, denesen reservation_service verwenden können.)
class Proxy:
def __init__(self, current_user, reservation_service):
self.current_user = current_user
self.reservation_service = reservation_service
class Reservation:
def __init__(self, date, total_price):
self.date = date
self.total_price = total_price
class ReservationService:
def highest_total_price_reservations(self, date_from, date_to, reservations_count):
# normally it would be read from database/external service
reservations = [
Reservation(date(2014, 5, 15), 100),
Reservation(date(2017, 5, 15), 10),
Reservation(date(2017, 1, 15), 50)
]
return sorted_reservations[0:reservations_count]