Einführung in Python

Auftakt

Willkommen bei der Online-Anleitung für Python von Google. Er basiert auf dem intern angebotenen Python-Einführungskurs. Wie auf der Einrichtungsseite erwähnt, geht es um Python 3.

Wenn Sie nach einem begleitenden MOOC-Kurs suchen, versuchen Sie es mit den Kursen von Udacity und Coursera (Einführung in das Programmieren [Anfänger] oder Einführung in Python). Wenn Sie online lernen möchten, ohne sich Videos anzusehen, probieren Sie die am Ende dieses Beitrags genannten Optionen aus. Sie enthalten jeweils Lerninhalte sowie einen interaktiven Python-Dolmetscher, mit dem Sie üben können. Was ist das für einen „Dolmetscher“? die wir erwähnten? Das erfährst du im nächsten Abschnitt.

Spracheinführung

Python ist eine dynamische, interpretierte (mit Bytecode kompilierte) Sprache. Im Quellcode sind keine Typdeklarationen von Variablen, Parametern, Funktionen oder Methoden vorhanden. Dadurch wird der Code kurz und flexibel und Sie verlieren die Typprüfung zur Kompilierungszeit des Quellcodes. Python verfolgt die Typen aller Werte zur Laufzeit und kennzeichnet Code, der bei der Ausführung keinen Sinn ergibt.

Eine hervorragende Möglichkeit, um zu sehen, wie Python-Code funktioniert, besteht darin, den Python-Interpreter auszuführen und Code direkt in ihn einzugeben. Wenn Sie jemals eine Frage wie „Was passiert, wenn ich eine int zu einem list hinzufüge?“ haben, Sie brauchen es nur in den Python-Interpreter einzugeben, um schnell und wahrscheinlich am besten zu sehen, was passiert. (Unten sehen Sie, was wirklich passiert.)

$ python3        ## Run the Python interpreter
Python 3.X.X (XXX, XXX XX XXXX, XX:XX:XX) [XXX] on XXX
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 6       ## set a variable in this interpreter session
>>> a           ## entering an expression prints its value
6
>>> a + 2
8
>>> a = 'hi'    ## 'a' can hold a string just as well
>>> a
'hi'
>>> len(a)      ## call the len() function on a string
2
>>> a + len(a)  ## try something that doesn't work
Traceback (most recent call last):
  File "", line 1, in 
TypeError: can only concatenate str (not "int") to str
>>> a + str(len(a))  ## probably what you really wanted
'hi2'
>>> foo         ## try something else that doesn't work
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'foo' is not defined
>>> ^D          ## type CTRL-d to exit (CTRL-z in Windows/DOS terminal)

Die zwei Zeilen Python werden ausgegeben, nachdem Sie Python eingegeben haben und vor dem >>> Prompt enthält Informationen dazu, die verwendete Python-Version und wo sie erstellt wurde. Solange das erste gedruckte Element „Python 3.“ brauchen, sollten diese Beispiele für Sie funktionieren.

Wie Sie oben sehen, ist es einfach, mit Variablen und Operatoren zu experimentieren. Der Dolmetscher wirft oder „hebt“ ein Laufzeitfehler, wenn der Code versucht, eine Variable zu lesen, der kein Wert zugewiesen wurde. Wie in C++ und Java ist bei Python zwischen Groß- und Kleinschreibung zu unterscheiden. und „A“ sind unterschiedliche Variablen. Das Ende einer Zeile markiert das Ende einer Anweisung. Im Gegensatz zu C++ und Java benötigt Python also kein Semikolon am Ende jeder Anweisung. Kommentare beginnen mit einem Rautezeichen (#). bis zum Ende der Zeile erweitert werden.

Python-Quellcode

Python-Quelldateien verwenden die Erweiterung und werden als „Module“ bezeichnet. Mit dem Python-Modul hello.py lässt es sich am einfachsten mit dem Shell-Befehl „python hello.py Alice“ ausführen. Dadurch wird der Python-Interpreter aufgerufen, um den Code in hello.py auszuführen und das Befehlszeilenargument „Alice“ zu übergeben. Informationen zu den verschiedenen Optionen, die Ihnen zur Verfügung stehen, wenn Sie Python über die Befehlszeile ausführen, finden Sie auf der offiziellen Dokumentationsseite.

Hier ist ein sehr einfaches hello.py-Programm (beachten Sie, dass Codeblöcke streng durch Einzug statt geschweiften Klammern getrennt sind – mehr dazu später):

#!/usr/bin/python3

# import modules used here -- sys is a very standard one
import sys

# Gather our code in a main() function
def main():
    print('Hello there', sys.argv[1])
    # Command line args are in sys.argv[1], sys.argv[2] ...
    # sys.argv[0] is the script name itself and can be ignored

# Standard boilerplate to call the main() function to begin
# the program.
if __name__ == '__main__':
    main()

Die Ausführung dieses Programms über die Befehlszeile sieht so aus:

$ python3 hello.py Guido
Hello there Guido
$ ./hello.py Alice  ## without needing 'python3' first (Unix)
Hello there Alice

Importe, Befehlszeilenargumente und len()

Die äußersten Anweisungen in einer Python-Datei oder einem "Modul" werden einmalig eingerichtet. Diese Anweisungen werden beim ersten Import des Moduls von oben nach unten ausgeführt und richten die Variablen und Funktionen ein. Ein Python-Modul kann direkt ausgeführt werden – wie oben bei python3 hello.py Bob – oder es kann importiert und von einem anderen Modul verwendet werden. Wenn eine Python-Datei direkt ausgeführt wird, wird die spezielle Variable "__name__" auf „__main__“ festgelegt ist. Daher ist es üblich, dass der oben gezeigte Boilerplate-if __name__ ==... eine „main()“-Funktion aufruft, wenn das Modul direkt ausgeführt wird, aber nicht, wenn das Modul von einem anderen Modul importiert wird.

In einem Python-Standardprogramm enthält die Liste sys.argv die Befehlszeilenargumente im Standardformat, wobei sys.argv[0] das Programm selbst, sys.argv[1] das erste Argument usw. Wenn Sie argc oder die Anzahl der Argumente kennen, können Sie diesen Wert einfach mit len(sys.argv) von Python anfordern, so wie wir es oben im interaktiven Interpretercode beim Anfordern der Länge eines Strings getan haben. Im Allgemeinen gibt len() Aufschluss darüber, wie lang ein String ist, wie viele Elemente in Listen und Tupeln (eine weitere Array-ähnliche Datenstruktur) vorhanden sind und wie viele Schlüssel/Wert-Paare in einem Wörterbuch vorhanden sind.

Benutzerdefinierte Funktionen

Funktionen in Python sind wie folgt definiert:

# Defines a "repeat" function that takes 2 arguments.
def repeat(s, exclaim):
    """
    Returns the string 's' repeated 3 times.
    If exclaim is true, add exclamation marks.
    """

    result = s + s + s # can also use "s * 3" which is faster (Why?)
    if exclaim:
        result = result + '!!!'
    return result

Beachten Sie auch, wie die Zeilen, aus denen die Funktion oder die if-Anweisung besteht, so gruppiert werden, dass alle die gleiche Einrückung haben. Wir haben auch zwei verschiedene Möglichkeiten vorgestellt, Zeichenfolgen zu wiederholen, wobei der +-Operator verwendet wird. Dieser ist benutzerfreundlicher, funktioniert aber auch, weil es sich um den „Repeat“ von Python handelt. d. h., '----------' bietet durch '-' * 10 eine praktische Möglichkeit, eine "Linie" auf dem Bildschirm zu erstellen. Im Codekommentar wurde angedeutet, dass * schneller funktioniert als +. Der Grund dafür ist, dass * die Größe des resultierenden Objekts einmal berechnet, während mit + die Berechnung jedes Mal durchgeführt wird, wenn + aufgerufen wird. Sowohl + als auch * werden als „überlastet“ bezeichnet. da sie für Zahlen unterschiedliche Bedeutungen haben als für Zeichenfolgen (und andere Datentypen).

Das Schlüsselwort def definiert die Funktion mit ihren Parametern in Klammern und eingerücktem Code. Die erste Zeile einer Funktion kann ein Dokumentationsstring ("docstring") sein, der die Funktion der Funktion beschreibt. Der docstring kann eine einzelne Zeile oder eine mehrzeilige Beschreibung wie im obigen Beispiel sein. (Ja, das sind dreifache Anführungszeichen, eine Funktion, die es nur in Python gibt!) Variablen, die in der Funktion definiert sind, sind lokal für diese Funktion festgelegt, sodass das „Ergebnis“ in der obigen Funktion getrennt von einem „Ergebnis“ ist, Variable in einer anderen Funktion. Die return-Anweisung kann ein Argument annehmen. In diesem Fall ist dies der Wert, der an den Aufrufer zurückgegeben wird.

Hier ist der Code, der die obige Repeat()-Funktion aufruft und das zurückgegebene Ergebnis ausgibt:

def main():
    print(repeat('Yay', False))      ## YayYayYay
    print(repeat('Woo Hoo', True))   ## Woo HooWoo HooWoo Hoo!!!

Zur Laufzeit müssen Funktionen durch die Ausführung einer "def"-Anweisung definiert werden. bevor sie aufgerufen werden. Es ist üblich, eine Main()-Funktion am Ende der Datei mit den von ihr aufgerufenen Funktionen darüber festzulegen.

Einzug

Eine ungewöhnliche Python-Funktion besteht darin, dass die Leerzeicheneinrückung eines Code-Teils seine Bedeutung beeinflusst. Ein logischer Block von Anweisungen, wie die, aus denen eine Funktion besteht, sollte alle dieselbe Einrückung haben, ausgehend von der Einrückung ihrer übergeordneten Funktion oder „if“. oder was auch immer. Weist eine Zeile in einer Gruppe eine andere Einrückung auf, wird dies als Syntaxfehler gekennzeichnet.

Die Verwendung von Leerzeichen in Python erscheint anfangs etwas seltsam, aber es ist logisch, und ich habe mich sehr schnell daran gewöhnt. Vermeiden Sie die Verwendung von TABS, da diese das Einrückungsschema erheblich erschweren (ganz zu schweigen von TAB können auf verschiedenen Plattformen unterschiedliche Bedeutungen haben). Stellen Sie Ihren Editor so ein, dass er bei Python-Code Leerzeichen anstelle von TABS einfügt.

Eine häufig gestellte Frage von Anfängern lautet: „Wie viele Leerzeichen sollte ich einrücken?“ Gemäß dem offiziellen Python-Styleguide (PEP 8) muss der Einzug mit vier Leerzeichen erfolgen. Übrigens: Gemäß den internen Style-Richtlinien von Google ist das Einrücken um zwei Leerzeichen voreingestellt.

Code während der Laufzeit geprüft

Python führt bei der Kompilierung nur sehr wenige Prüfungen durch und verschiebt fast alle Typ-, Namen-, usw.-Prüfungen für jede Zeile, bis diese Zeile ausgeführt wird. Angenommen, der obige Befehl "main()" ruft "Repeat()" wie folgt auf:

def main():
    if name == 'Guido':
        print(repeeeet(name) + '!!!')
    else:
        print(repeat(name))

Die if-Anweisung enthält einen offensichtlichen Fehler, bei dem die Funktion Repeat() versehentlich als repeeeet() eingegeben wird. Das Kuriose bei Python ... Dieser Code wird kompiliert und funktioniert einwandfrei, solange der Name zur Laufzeit nicht "Guido" lautet. Nur wenn eine Ausführung versucht, die repeeeet() auszuführen, wird sie feststellen, dass eine solche Funktion nicht vorhanden ist, und es wird ein Fehler ausgegeben. Dieses Snippet enthält auch einen zweiten Fehler. name wurde vor dem Vergleich mit „Guido“ kein Wert zugewiesen. Python löst einen "NameError" wenn Sie versuchen, eine nicht zugewiesene Variable auszuwerten. Diese Beispiele zeigen, dass beim ersten Ausführen eines Python-Programms einige der ersten Fehler einfache Tippfehler oder nicht initialisierte Variablen wie diese sind. Dies ist ein Bereich, in dem Sprachen mit einem ausführlicheren Typsystem wie Java einen Vorteil haben ... sie können solche Fehler beim Kompilieren erkennen (aber natürlich müssen Sie alle diese Typinformationen verwalten ... das ist ein Kompromiss).

Mit Python 3 wurden Typhinweise eingeführt. Mit Typhinweisen können Sie für jedes Argument in einer Funktion angeben, welchen Typ den Typ des von der Funktion zurückgegebenen Objekts. In der annotierten Funktion def is_positive(n: int) -> bool: ist beispielsweise das Argument n ist eine int und der Rückgabewert ist bool. Auf die Bedeutung dieser Typen schauen wir uns später an. Eingabehinweise sind jedoch völlig optional. Es werden immer mehr Hinweise für Codeübernahmen angezeigt. können einige Editoren wie cider-v und VS.code überprüfen, ob Ihre Funktionen mit Argumenttypen verwenden. Sie können sogar Argumente vorschlagen und validieren, während Sie Code bearbeiten. In diesem Tutorial werden keine Typhinweise behandelt, aber wir möchten sicherstellen, dass Sie sie kennen, wenn Sie oder sie in freier Wildbahn zu sehen.

Variablennamen

Da für Python-Variablen kein Typ im Quellcode ausgeschrieben ist, ist es besonders hilfreich, den Variablen aussagekräftige Namen zu geben, damit Sie immer daran erinnert werden, was vor sich geht. Verwenden Sie also „name“ wenn es ein einzelner Name ist, und „names“ wenn es eine Liste mit Namen ist, wenn es eine Liste von Tupeln ist. Viele grundlegende Python-Fehler entstehen oft, wenn Sie vergessen, welche Art von Wert in den einzelnen Variablen enthalten ist. Verwenden Sie daher einfach nur die Variablennamen, die Ihnen zur Verfügung stehen.

Im Hinblick auf die eigentliche Benennung wird in einigen Sprachen Unterstrich_parts für Variablennamen bevorzugt, die aus mehreren Wörtern bestehen. aber andere Sprachen bevorzugen CamelCasing. Im Allgemeinen bevorzugt Python die Unterstrich-Methode, führt Entwickler jedoch dazu, sich bei einer Integration in vorhandenen Python-Code, der bereits diesen Stil verwendet, auf "CamelCasing" zu beschränken. Die Lesbarkeit zählt. Weitere Informationen finden Sie im Abschnitt zu Namenskonventionen in PEP 8.

Wie Sie sich denken können, werden Keywords wie und während können nicht als Variablennamen verwendet werden, da Sie dann einen Syntaxfehler erhalten. Achten Sie jedoch darauf, keine integrierten Integrationen als Variablennamen zu verwenden. Beispiel: Während "str", "list" und "print" gute Namen erscheinen, würden Sie diese Systemvariablen überschreiben. „Integrierte“ ist keine Schlüsselwörter und daher anfällig für eine unbeabsichtigte Verwendung durch neue Python-Entwickler.

Weitere Informationen zu Modulen und ihren Namespaces

Angenommen, du hast das Modul „binky.py“ das eine "def foo()" enthält. Der voll qualifizierte Name dieser foo-Funktion lautet „binky.foo“. Auf diese Weise können verschiedene Python-Module ihre Funktionen und Variablen beliebig benennen und die Variablennamen werden nicht in Konflikt geraten – „module1.foo“ unterscheidet sich von „module2.foo“. Im Python-Vokabular würden wir sagen, dass „binky“, „module1“ und „module2“ jeweils eigene „Namespaces“ haben. also Bindungen zwischen Variablenname und Objekt.

Zum Beispiel haben wir den Standard -Modul, das Standardsystemfunktionen wie die argv list und die Funktion "exit()" enthält. Mit der Anweisung „import sys“ können Sie dann auf die Definitionen im Systemmodul zugreifen und sie unter dem voll qualifizierten Namen zur Verfügung stellen, z.B. sys.exit(). (Ja, „sys“ hat auch einen Namespace!)

  import sys

  # Now can refer to sys.xxx facilities
  sys.exit(0)

Es gibt ein weiteres Importformular, das wie folgt aussieht: „from sys import argv,exit“. Dadurch stehen argv undexit() durch ihre Kurznamen zur Verfügung. Wir empfehlen jedoch das Originalformular mit den voll qualifizierten Namen, da sich so viel einfacher feststellen lässt, woher eine Funktion oder ein Attribut stammt.

In einer Standardinstallation des Python-Interpreters sind viele Module und Pakete enthalten, sodass Sie nichts weiter tun müssen, um sie zu verwenden. Diese werden zusammen als die „Python-Standardbibliothek“ bezeichnet. Zu den häufig verwendeten Modulen/Paketen gehören:

  • sys — Zugriff auf Exit(), argv, stdin, stdout, ...
  • re: reguläre Ausdrücke
  • os – Betriebssystemschnittstelle, Dateisystem

Die Dokumentation aller Module und Pakete der Standardbibliothek finden Sie unter http://docs.python.org/library.

Onlinehilfe, help() und dir()

Es gibt verschiedene Möglichkeiten, Hilfe für Python zu erhalten.

  • Führen Sie eine Google-Suche durch, die mit dem Wort „Python“ beginnt, z. B. „Python-Liste“ oder „Python String in Kleinbuchstaben“. Der erste Treffer liefert oft die richtige Antwort. Diese Technik scheint für Python besser zu funktionieren als für andere Sprachen.
  • Die offizielle Python-Dokumentationswebsite – docs.python.org – bietet qualitativ hochwertige Dokumente. Trotzdem finde ich oft eine Google-Suche nach ein paar Wörtern schneller.
  • Es gibt auch eine offizielle Mailingliste für Tutor, die speziell für diejenigen entwickelt wurde, die neu in Python und/oder Programmierung sind.
  • Viele Fragen und Antworten finden Sie auf StackOverflow und Quora.
  • Verwenden Sie die Funktionen help() und dir() (siehe unten).

Im Python-Interpreter ruft die Funktion help() Dokumentationszeichenfolgen für verschiedene Module, Funktionen und Methoden auf. Diese Dokument-Strings ähneln Javadoc-Strings. Die Funktion dir() gibt die Attribute eines Objekts an. Im Folgenden findest du einige Möglichkeiten, wie „help()“ und dir() vom Interpreter aufgerufen werden können:

  • help(len): Hilfestring für die integrierte len()-Funktion beachte, dass es „len“ ist „len()“, bei dem es sich um einen Aufruf der Funktion handelt,
  • help(sys): Hilfestring für das Modul sys (muss zuerst import sys ausführen)
  • dir(sys): dir() ähnelt help(), gibt aber nur eine kurze Liste der definierten Symbole oder „Attribute“ an
  • help(sys.exit) – Hilfestring für die Funktion exit() im Modul sys
  • help('xyz'.split): Hilfestring für die Methode split() für Stringobjekte. Sie können help() mit diesem Objekt selbst oder mit einem Beispiel dieses Objekts und seinen Attributen aufrufen. Der Aufruf von help('xyz'.split) entspricht beispielsweise dem Aufrufen von help(str.split).
  • help(list) – Hilfestring für list-Objekte
  • dir(list): Zeigt list-Objektattribute einschließlich der Methoden an
  • help(list.append) – Hilfestring für die Methode append() für list-Objekte