Re: kein sleep() in python

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Tue, 7 Dec 2010 12:55:01 +0100 (CET)

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.

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.)

Ü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.

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)

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

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart
FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd
"A language that doesn't have everything is actually easier
to program in than some that do."
        -- Dennis M. Ritchie
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 - 12:56:26 CET

search this site