from a import * und globale Variable

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
p90
User
Beiträge: 198
Registriert: Donnerstag 22. Juli 2010, 17:30

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.
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.
p90
User
Beiträge: 198
Registriert: Donnerstag 22. Juli 2010, 17:30

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!
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

*-importe sind trotzdem unfein.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
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.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ich bleib dabei. Ich finde es übersichtlicher, wenn einzelne Module explizit zusammengeführt werden. *-importe sind mir zuviel Magie.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Antworten