Python
Codebeispiele

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.

Python/Codebeispiele (last edited 2009-06-17 16:14:31 by localhost)