`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

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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 21. Juli 2008, 20:56

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

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:

Dienstag 22. Juli 2008, 09:01

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

Dienstag 22. Juli 2008, 19:03

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
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 22. Juli 2008, 23:55

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 Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

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: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

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: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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

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

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
Antworten