Re: kein sleep() in python

From: Marc Santhoff <M.Santhoff(at)web.de>
Date: Tue, 07 Dec 2010 14:25:52 +0100

Am Dienstag, den 07.12.2010, 12:55 +0100 schrieb Oliver Fromme:
> Marc Santhoff wrote:
> > Am Dienstag, den 07.12.2010, 11:22 +0100 schrieb Oliver Fromme:
> > > Marc Santhoff wrote:
> > > > import x
> > > > a = x.y
> > > >
> > > > oder wenn man die Funktion im Namensraum haben möchte
> > > >
> > > > import y from x
> > > > a = y
> > >
> > > Anders herum: from x import y
> >
> > Recht hast Du, da ist wohl die Begeisterung mit mir durchgegangen ...
> >
> > <Haarspaltermodus>
> >
> > Eigentlich wäre es ja andersrum richtiger, zumindet natürlichsprachlich
> > betrachtet. Man kann argumentieren, daß man sofort am Zeilenanfang
> > sieht, daß was anderes passiert, aber ich hab' da wohl gleich einen
> > Standardfehler gemacht ...
> >
> > Wahrscheinlich ist der Parser so einfacher zu schreiben. ;)
>
> Ich glaube nicht, dass es für den Parser einen nennenswer-
> ten Unterschied macht.

Vorsicht: Humor. ;)

> Der eigentliche Grund ist vermutlich der, dass der Name des
> Moduls vorne in der Zeile stehen soll, so dass die Modul-
> Namen mehrerer import-Zeilen untereinander stehen (mehr
> oder weniger). Dies fördert vor allem dann die Übersicht,
> wenn man mehrere Namen aus einem Modul importiert, was ja
> in der Praxis häufig vorkommt.
>
> Konkretes Beispiel aus einem Python-Programm von mir:
>
> import sys
> import getopt
> from os.path import basename, dirname, join, exists, isfile, isdir
> from errno import *
> from subprocess import Popen, PIPE
> from PIL import Image, ImageDraw, ImageFont
> from ycbcr import up_420_444_mpeg2, ycbcr_to_m, ycbcr420_to_rgb
>
> (Ob man das jetzt so schön in Spalten schreibt, bleibt je-
> dem selbst überlassen; ich persönlich finde es übersicht-
> licher.)

Das ist wirklich ein Argument.

> Übrigens (nur am Rande): Mit "import *" (wie oben bei
> errno) sollte man sehr vorsichtig sein, da man sich damit
> sehr leicht ungewollte Namen in den eigenen, globalen Na-
> mensraum ziehen kann. Wenn man dann versehentlich eine
> eigene Variable oder Funktion gleichen Namens definiert,
> kann das Fehler zur Folge haben, die schwer zu debuggen
> sind. Daher sollte man "import *" nur bei Modulen verwen-
> den, bei denen es in der Dokumentation ausdrücklich als
> ungefährlich gekennzeichent ist. Bei errno ist das der
> Fall, da dieses Modul ausschließlich Konstanten enthält,
> die mit "E" anfangen.

Ah ja, gut zu wissen. Allerdings ist für mich ohnehin besser, das Modul
zu importieren und Funktionen mit qualifiziertem Namen anzureden, dann
fällt es leichter nach längerer Zeit wieder den Einstieg zu finden.

> Und noch ein "übrigens": Mit der eingebauten Funktion
> dir() kann man sich im interaktiven Modus anschauen, was
> alles in einem Modul enthalten ist, was sehr nützlich
> beim Durchstöbern eines Moduls sein kann. Probier z.B.
> mal aus:
>
> $ python
> >>> import errno
> >>> dir(errno)

Hatte ich beim Stöbern in der Doku auch gesehen, aber kurz drauf war ich
fertig und hab's nicht mehr probiert.

> Jetzt mach' ich lieber Schluss, bevor daraus noch ein
> Python-Tutorial wird ... :-)

Darfst Du gern, wenn's deinen Arbeitgeber nicht stört. :)
Zumndest werden ein paar Mails aus diesem Thread im Wurzelverzeichnis
bei meinen (paaar) Python-Skripten landen.

-- 
Marc Santhoff <M.Santhoff(at)web.de>
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 07 Dec 2010 - 14:25:07 CET

search this site