Seite 1 von 1
Unterschied zwischen Python bash und IDLE bei Import
Verfasst: Sonntag 10. März 2013, 16:07
von Sinnentlehrt
Hallo Leute,
habe wohl irgend etwas mal wieder vergessen. Kurz gesagt, dieser 3 Zeiler, genannt funktion3.py:
Code: Alles auswählen
def funktion3(a, b, *weitere):
print "Feste Parameter:", a, b
print "Weitere Parameter:", weitere
Bei der Python bash:
Code: Alles auswählen
>>> import funktion3
>>> funktion3(1, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
>>>
Bei der IDLE verhält es sich erst genauso. Dann führe ich das Skript über F5 aus, die IDLE macht einen Neustart und alles verhält sich so wie gedacht.
Code: Alles auswählen
>>> funktion3(2, 3)
Feste Parameter: 2 3
Weitere Parameter: ()
>>>
Warum?? :K
Grüsse,
Re: Unterschied zwischen Python bash und IDLE bei Import
Verfasst: Sonntag 10. März 2013, 16:18
von Sirius3
Hallo Sinnentlehrt,
Du denkst einfach falsch. import funktion3 importiert das Modul „funktion3“. Dieses enthält die
Funktion function3 die Du dann aufrufen kannst:
Code: Alles auswählen
>>> import funktion3
>>> funktion3.funktion3(2, 3)
Feste Parameter: 2 3
Weitere Parameter: ()
>>>
IDLE macht es anders, weil es die Definitionen eines vorhergehenden Aufrufs sich merkt. Mit F5 wird
also funktion3 als Funktion direkt in den globalen IDLE-Namensraum gebunden und kann dann auch benutzt werden.
Re: Unterschied zwischen Python bash und IDLE bei Import
Verfasst: Sonntag 10. März 2013, 16:19
von cofi
Das kein Unterschied zwischen Python Shell (nicht bash!) und IDLE, sondern du machst zwei verschiedene Sachen:
In der Python-Shell importierst du das Modul und solltest per `funktion3.funktion3` auf diese Funktion zugreifen, in IDLE fuehrst du den Code aus. Letzteres ist eher ein Copy+Paste in die Shell als ein Ausfuehren der Datei.
Re: Unterschied zwischen Python bash und IDLE bei Import
Verfasst: Sonntag 10. März 2013, 16:20
von BlackJack
@Sinnentlehrt: Es gibt keine „Python bash”, das heist Python-Shell. Bash ist eine Kommandoshell die nichts mit Python zu tun hat.
Du hast ein Modul mit dem Namen `funktion3` und darin eine Funktion mit dem Namen `funktion3`. Mit ``import`` importierst Du das Modul und dann versuchst Du das *Modul* aufzurufen. Was im übrigen genau das ist was Dir die Fehlermeldung sagt: Module sind nicht aufrufbar. Du musst entweder die Funktion über das Modul ansprechen, die Namen auf Modulebene sind Attribute vom Modulobjekt, oder nicht das Modul sondern die Funktion aus dem Modul in den aktuellen Namensraum importieren. Also:
Code: Alles auswählen
import funktion3
funktion3.funktion3(42, 23, 4711)
# oder
from funktion3 import funktion3
funktion3(42, 23, 4711)
IDLE macht leider *keinen* Neustart sondern führt das Modul anscheinend im Python-Shell-Namensraum aus, wodurch dann die Funktion dort einfach so auf magische Weise verfügbar ist. Was ich ja irgendwie für ziemlich kaputtes Verhalten halte. Aber so ist IDLE halt.
Re: Unterschied zwischen Python bash und IDLE bei Import
Verfasst: Sonntag 10. März 2013, 23:00
von Sinnentlehrt
Alles klar
Ja, ich hatte es schon genauso gelesen. (Ehrenwort!!)
Und hätte ich
probiert, dann hätte es auch gleich geklappt.
Danke für eure Erklärungen und leider wird das wohl nicht meine letzte blöde Frage bleiben, aber Leute, da müßen wir jetzt gemeinsam durch.
Und klar, es gibt keine Python bash,
also völlig klar!
Sorry, jetzt echt. Obwohl ich wohl echt zu blöd zum Programmieren bin will ich es trotzdem lernen. Bin halt ein Einzelkind, total verwöhnt.
Und nochmal Danke!!!!!
Gruss,
Re: Unterschied zwischen Python bash und IDLE bei Import
Verfasst: Montag 11. März 2013, 00:56
von Leonidas
Sinnentlehrt hat geschrieben:Und hätte ich
probiert, dann hätte es auch gleich geklappt.

Ja, aber das wäre kein guter Programmierstil gewesen, daher ist es andersrum schon besser.