Seite 1 von 1

from a import * und globale Variable

Verfasst: Donnerstag 21. Juli 2011, 14:31
von p90
Hi,

folgendes Problem.
Ich habe einen Teil meindes Codes in ein zweites Modul ausgelagert.
Nun möchte ich diesen wieder im selben Namespace haben wie meinen Hauptcode.
Probiere es nun mit from a import * was aber nicht geht.
MinimalBsp:
a.py

Code: Alles auswählen

k = 5
print k
Pythoninterpret:

Code: Alles auswählen

>> from a import *
5
>>print k
NameError: k is not defined
Meine Frage ist nun, wie importiere ich globale Variablen in meinen Namespace?
Warum behandelt Python Funktionen und Variablen überhaupt anders?
MfG


p90


PS:
http://docs.python.org/tutorial/modules.html ist gerade down, ka was da los ist, konnte aber ansonsten auch nichts zu diesem Problem finden.

Re: from a import * und globale Variable

Verfasst: Donnerstag 21. Juli 2011, 15:19
von BlackJack
@p90: Das kann nicht sein was Du da behauptest. Sternchen-Import bindet alle Namen im importierenden Namensraum stehen. Ob die an Zahlen, Funktionen, oder sonst welche Objekte gebunden sind, spielt dabei keine Rolle.

Ausnahme sind Namen, die mit Unterstrichen beginnen und wenn es ein `__all__`-Attribut im importierten Modul gibt. Was beides in Deinem Beispiel nicht vorkommt.

Re: from a import * und globale Variable

Verfasst: Donnerstag 21. Juli 2011, 15:48
von p90
Ahh, okay, dann ist das klar.
Meine variablen haben tatsächlich _ am Anfang und werden deshlab nicht übernommen.
Ka was da mit meinem Minimalbsp los war aber vorhin ging es auch nicht, jetzt schon.
Vermutlich habe ich irgendwo einen Fehler beim Abtippen gemacht..
Danke fürs erklären!

Re: from a import * und globale Variable

Verfasst: Donnerstag 21. Juli 2011, 15:49
von jbs
*-importe sind trotzdem unfein.

Re: from a import * und globale Variable

Verfasst: Donnerstag 21. Juli 2011, 16:32
von lunar
@jbs: Das würde ich pauschal nicht sagen. Der Sternchen-Import eines Drittmoduls ist sicherlich unschön. Innerhalb eines Pakets aber kann man durchaus Sternchen-Importe nutzen, beispielsweise um verschiedene Untermodule auf Paketeebene zu einer externen Schnittstelle zusammenzufassen. Die Gefahr von Namenskonflikte ist da weniger gegeben, da man die betroffenen Namensräume allesamt selbst kontrollieren und mithilfe von "__all__" beeinflussen kann.

Re: from a import * und globale Variable

Verfasst: Donnerstag 21. Juli 2011, 19:25
von jbs
Ich bleib dabei. Ich finde es übersichtlicher, wenn einzelne Module explizit zusammengeführt werden. *-importe sind mir zuviel Magie.