`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.
Antworten
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du suchst ``__import__``.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


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:

[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:
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 (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) 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

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/
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

birkenfeld hat geschrieben:Versteh ich jetzt nicht.
Mein Fehler - das passiert so nicht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten