`import_str("foo")` statt `import foo`

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

`import_str("foo")` statt `import foo`

Beitragvon droptix » Montag 21. Juli 2008, 20:45

Ich suche eine Möglichkeit, Module zu importieren, deren Namen ich als String parat habe. Es gibt zwar das imp-Modul, aber da muss man ja gleich den kompletten Pfad zur Modul-Datei und so noch einiges angeben...

Ich suche aber sowas hier: statt `import foo` `import_str("foo")`. Geht das? Ich dachte ich bin schonmal drüber gestolpert, finde es aber nicht wieder... auch nicht hier in der Forum-Suche.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 21. Juli 2008, 20:56

Du suchst ``__import__``.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 22. Juli 2008, 07:25


CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Beitragvon veers » Dienstag 22. Juli 2008, 09:01

My Website - 29a.ch
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 22. Juli 2008, 19:03

veers hat geschrieben:http://werkzeug.pocoo.org/documentation/utils#werkzeug.utils.import_string ;)

Irgendwie komisch den Name. Man importiert ja keinen string...
Finde meine Variante besser: http://www.python-forum.de/post-99528.html#99528 Weil sie im Prinzip genauso funktioniert wie der normale import.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 22. Juli 2008, 23:55

jens hat geschrieben:
veers hat geschrieben:http://werkzeug.pocoo.org/documentation/utils#werkzeug.utils.import_string ;)

Irgendwie komisch den Name. Man importiert ja keinen string...
Finde meine Variante besser: http://www.python-forum.de/post-99528.html#9952

Irgendwie komisch der Name. Man importiert ja nicht zwei Module...

Außerdem mutable Objekte als Default-Parameter in der Signatur? Das wird wohl kaum so funktionieren wie gedacht.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 23. Juli 2008, 07:10

Leonidas hat geschrieben:Irgendwie komisch der Name. Man importiert ja nicht zwei Module...

Das ist die selbe Idee wie bei urllib und urllib2.

Leonidas hat geschrieben:Außerdem mutable Objekte als Default-Parameter in der Signatur? Das wird wohl kaum so funktionieren wie gedacht.

Was meinst du damit? Kannst du mal ein Beispiel geben?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Mittwoch 23. Juli 2008, 08:01

jens hat geschrieben:
Leonidas hat geschrieben:Außerdem mutable Objekte als Default-Parameter in der Signatur? Das wird wohl kaum so funktionieren wie gedacht.

Was meinst du damit? Kannst du mal ein Beispiel geben?

Code: Alles auswählen

def test(foo=[]):
    foo.append("bar")
    print foo


for dummy in xrange(10):
    test()

Code: Alles auswählen

['bar']
['bar', 'bar']
['bar', 'bar', 'bar']
['bar', 'bar', 'bar', 'bar']
['bar', 'bar', 'bar', 'bar', 'bar']
['bar', 'bar', 'bar', 'bar', 'bar', 'bar']
['bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar']
['bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar']
['bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar']
['bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar']



yay. Den Code hatte ich noch gespeichert :D
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 23. Juli 2008, 08:25

OK, aber wie kann man das jetzt auf import2() übertragen?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Mittwoch 23. Juli 2008, 08:29

Bei deiner Funktion tritt der Effekt nicht auf, da du die Argumente nicht veränderst.

Aber eigentlich lässt es man per Konvention ganz, mutables als Default zu nehmen und nimmt stattdessen "None", damit keine Verwirrung auftritt.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 23. Juli 2008, 08:34

audax hat geschrieben:Aber eigentlich lässt es man per Konvention ganz, mutables als Default zu nehmen und nimmt stattdessen "None", damit keine Verwirrung auftritt.

Das ist mir jetzt zum ersten mal aufgefallen.

Ich hab's mal geändert.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 23. Juli 2008, 11:45

audax hat geschrieben:Bei deiner Funktion tritt der Effekt nicht auf, da du die Argumente nicht veränderst.

Bei der Funktion tritt das schon auf, denn wenn man sie mit irgendwelchen Parametern aufruft, dann bleiben die Referenzen bestehen und Memory Leaks können durch unbenötigte Referenzen entstehen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Mittwoch 23. Juli 2008, 14:54

Leonidas hat geschrieben:
audax hat geschrieben:Bei deiner Funktion tritt der Effekt nicht auf, da du die Argumente nicht veränderst.

Bei der Funktion tritt das schon auf, denn wenn man sie mit irgendwelchen Parametern aufruft, dann bleiben die Referenzen bestehen und Memory Leaks können durch unbenötigte Referenzen entstehen.


Versteh ich jetzt nicht.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 23. Juli 2008, 15:10

birkenfeld hat geschrieben:Versteh ich jetzt nicht.

Mein Fehler - das passiert so nicht.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder