[Python-de] Modul von anderswo laden?

Matthias Urlichs smurf at noris.de
Fri Mar 8 16:05:46 EST 2002


Hi,

Det:
> Verstehen was es macht und ueber sprachadaequates Design nachdenken.
> 
Das ist in diesem Fall relativ simpel. Unter Perl mache ich:

use Loader qw(diese_funktion)

und meine damit, dass der Lader einen Stub in die Symboltabelle
einsetzt, den er beim ersten Aufruf der Funktion durch den eigentlichen
Code ersetzt, welcher sich in der Datei ".../diese/funktion.pl" befindet.

Das wird in Python einfacher, weil ein "import", das ich in eine Funktion
reinschreibe, auch erst zur Laufzeit der Funktion aufgerufen wird. Es ist
aber insofern schwieriger, als ein "import diese_funktion" normalerweise
eben bewirkt, dass diese_funktion ein Modul und keine Funktion ist, und
genau das will ich nicht haben.

> 2.) Ist es gerade aus Performance immer besser, nahe an der
> Zielsprache zu bleiben.
> 
Ich habe für dieses Perl-Programm vor Urzeiten eine Abstraktion für
Datenbankzugriff geschrieben. Das Teil sieht inzwischen beim Aufruf so
aus:

DoSelect { 
	my($bla,$fasel)=@_;
	... mehrere Zeilen Code ...
	... in denen ebenfalls SELECT oder UPDATE stehen könnte ...
	... ohne dass die Datenbank sich blockiert bitte ...
} "select bla,fasel ... ";

und allein das mit den mehreren Zeilen zwischen der Zuweisung und dem
SELECT-Befehl macht das Teil unwartbar. (Den String zuerst schreiben geht
auch, aber dann braucht es einen Haufen zusätzlicher Syntax:
'DoSelect("Bla",sub {...});'  )

Unter Python sieht das viel schöner aus:

for bla,fasel in Db.DoSelect("select bla,fasel ..."):
	... schonmal eine Zeile Code weniger ...

Das sieht besser aus, ist schneller, und ich kriege automatisch einen
Fehler gemeldet, wenn die Zahl der Variablen nicht stimmt.

(Und ja, das Ding IST ein Generator.)


> 3.) Ich habe letztens einen gesehen, der aus dem gleichen Grund in
> Java alle Attribute und Methoden static public gemacht hat.

Meine persönliche Horror-Story ist immer noch die von einem, der eine
Integer-Variable in eine Fliesskommazahl umwandelte, indem er sie mit
sprintf() in einen Puffer geschrieben, dann ".0" angehängt, und mit
sscanf() wieder eingelesen hat ... und solche Praktiken zogen sich
komplett durch den Code.

Die ursprüngliche Programmiersprache?

COBOL.

-- 
Matthias Urlichs     |     noris network AG     |     http://smurf.noris.de/



More information about the Python-de mailing list