Hier das typische Hello World Beispiel:
1 print "Hallo Welt"
Nicht wirklich überzeugend oder?
Deswegen hier ein Programm, das eine Webseite herunterlädt und alle Links auflistet, die darauf vorkommen:
1 import urllib
2 import re
3
4 def get_links(url):
5 # Verbindung öffnen
6 fp = urllib.urlopen(url)
7 # Daten auslesen
8 html = fp.read()
9 # Regex anwenden und alle Gruppen suchen
10 links = re.findall('<a.*?href="((http|ftp)s?://.*?)".*?>(?uism)', html)
11 # Liste so manipulieren, dass nur noch das erste Element zurückgegeben
12 # wird (also die 1. Gruppe)
13 return [group[0] for group in links]
14
15 # alle links ausgeben
16 for link in get_links('http://www.python.org'):
17 print link
Python bietet nette Möglichkeiten zu iterieren (s. Allgemeine Begriffe#I).
1 def lineiter(filelist):
2 # iteriere über alle files der filelist
3 for filename in filelist:
4 # iteriere über alle zeilen des files
5 for line in open(filename):
6 # gib nen generatorobjekt zum iterieren über die zeilen zurück
7 yield line
8
9 # erzeuge ein generatorobjekt und nenn es iter
10 iter = lineiter(("datei1", "datei2", "datei3"))
11
12 # für jede zeile in den files...
13 for line in iter:
14 # ...mach irgendwas damit
15 print line
Wie siehts aus mit Closures? (s. Allgemeine Begriffe#C, Methoden/Funktionen sind in Python übrigens Objekte)
1 def get_counter():
2 # hier wird der counter in einer liste gespeichert, da sonst
3 # das neubinden des namens in den inneren Funktionen nur den
4 # lokalen namespace ändern würde und nicht die closure.
5 counter = [0]
6 def get():
7 # gibt den wert des zählers zurück
8 return counter[0]
9 def inc():
10 # inkrementiere den zähler
11 counter[0] += 1
12 # gib die beiden funktionen zurück
13 return get, inc
14
15 # jetzt brauch ich nen lokalen zähler
16 GET, INC = get_counter()
17
18 # gibt 0 zurück
19 GET()
20 # 1
21 INC()
22 # 2
23 INC()
24 # gibt 2 zurück
25 GET()
26
27 # counter ist nicht im namensraum
28 >>> dir()
29 ['GET', 'INC', '__builtins__', '__doc__', '__name__', 'get_counter']
Wie sieht's aus mit Argumenten von Funktionen?
1 # Eine Funktion die eine beliebige Anzahl von Argumenten nimmt.
2 def funktion1(*args):
3 print args
4
5 >>> funktion1("Hallo","wie","gehts?")
6 ('Hallo','wie','gehts?')
7
8 # Default-Werte für Argumente.
9 def funktion2(eins="1",zwei="2"):
10 print "%r %r" % (eins,zwei)
11
12 >>> funktion2()
13 '1' '2'
14 >>> funktion2("1 mal anders")
15 '1 mal anders' '2'
16
17 # Keyword-Argumente, also Argumente nach Namen zuweisen:
18 >>> funktion2(zwei="2 mal anders")
19 '1' '2 mal anders'
20
21 # Placeholder wie in C um anzudeuten dass das Argument nicht
22 # übergeben werden soll und stattdessen der Standardwert verwendet
23 # werden soll gibt es in Python nicht, das bedeutet man darf nie
24 # ein Argument leer lassen [FEHLER: funktion2(,"2 mal anders")]
25
26 # Beliebige Anzahl an Keyword-Argumenten:
27 def funktion3(**kwargs):
28 print kwargs
29
30 # Die unten angegebene Reihenfolge der Schlüssel-Wert-Paare kann
31 # möglicherweise nicht mit dem Übereinstimmen was auf Deinem
32 # Bildschirm beim Ausführen angezeigt wird.
33 >>> funktion3(deutsch="hallo",englisch="hello")
34 {'deutsch':'hallo','englisch':'hello'}
35 >>> funktion3("blah")
36 Traceback (most recent call last):
37 File "<stdin>", line 1, in
38 TypeError: funktion3() takes exactly 0 arguments (1 given)
39
40 # Wenn eine Funktion nur Keyword-Argumente nimmt darf man Ihr
41 # keine positionalen Argumente geben.
42
mehr
Im Wiki sind alle Code-Schnipsel getaggt, somit findest du sie unter Tags/Codesnippets.