Aktualisieren von Import

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
planktom
User
Beiträge: 15
Registriert: Donnerstag 28. Dezember 2006, 12:09

Hi!
Ich hab' eine Datei c4_1.py mit folgendem Inhalt:

Code: Alles auswählen

def countdown(n):
	if n == 0:
		print "Blastoff!"
	else:
		print n
	countdown(n-1)
und importiere diese mit

Code: Alles auswählen

>>> import c4_1
Alles super, ich kann auf die Funktion zugreifen. Jetzt möchte ich noch zusätzlich eine weitere Funktion in diese Datei aufnehmen:

Code: Alles auswählen

def countdown(n):
	if n == 0:
		print "Blastoff!"
	else:
		print n
	countdown(n-1) 
    
def nLines(n):
	if n > 0:
		print
        nLines(n-1)
Wie schaff ich es nun, dass ich auf die zweite Funktion zugreifen kann? Ein erneuter Import bringt nichts: "NameError: name 'nLines' is not defined". Meine einzige Lösung ist momentan, die Python-Shell zu verlassen und neu zu starten. Ein anschließender erneuter Import stellt mir die neue Funktion zur Verfügung. Geht das auch einfacher?
Ciao
Tom
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mit

Code: Alles auswählen

reload(c4_1)
.

In der Python-Shell zu entwickeln finde ich aber sehr unpraktisch. Ich würde entweder gleiche eine vernünftige IDE nehmen oder zumindest ein Script basteln, welches du dann mit "python main.py" aufrufst. Das geht schnell und vermeidet Fehler.
Das Leben ist wie ein Tennisball.
planktom
User
Beiträge: 15
Registriert: Donnerstag 28. Dezember 2006, 12:09

Danke!
Das war's.
Wenn ich nun aber die Funktionen über Ihren Namen importiert habe:

Code: Alles auswählen

from C4_9 import nLines
, wie kann ich dann aktualisieren. Ein reload scheitert:

Code: Alles auswählen

>>> from C4_9_1 import nLines
>>> reload(C4_9_1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'C4_9_1' is not defined
>>> 
Hast du dafür auch 'nen "Trick" auf Lager?

Ach ja, ich bin keineswegs an dem Punkt wo ich bereits entwickeln können/möchte/tue. Bin noch fleißig am Lernen und da ist mir eine, wenn auch vernünftige IDE zuviel Overhead. Eric4 gibt z.B. andere Fehlermeldungen aus als die originäre Python-Shell. Da fällt es mir dann schwer zu beurteilen, welche Aussagen richtig sind. Mein aktuelles Tutorial: "How to Think Like a Computer Scientist" beschränkt sich bisher auch auf die Shell.
Ciao
Tom
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

`reload` kannst du nur für komplette Module nutzen. Für Namen geht sowas nicht.

Aber tu dir selbst einen Gefallen und steige auf Dateien um.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Was du nun vor hast wird wirklich unpraktisch. Dann mach dir gleich eine vernünftige main.py, welches du ins selbe Verzeichnis packst wie deine bisherigen Dateien:

Code: Alles auswählen

from C4_9 import nLines


def my_function1():
    nLines(...)
    ...

def my_function2():
    ....


def main():
    #use functions here
    my_function1()
    my_function2()


if __name__ == "__main__":
    main()

Aufrufen dann über "python main.py". Du bekommst die selben Fehlermeldungen wie in der Python-Shell.

Alles was du sonst eingibst kannst du nun in der main-Funktion eintragen.

Du solltest auch deine Modulnamen überdenken "C4_0_1" ist total nichtssagend, außer du steuerst Geräte an, welche gerade so heißen.
Das Leben ist wie ein Tennisball.
planktom
User
Beiträge: 15
Registriert: Donnerstag 28. Dezember 2006, 12:09

C4_9_0 = Chapter 4.9.0, find' ich jetzt nicht so umständlich. Damit hab' ich jederzeit einen Bezug zu den Kapiteln und den durchgespielten Beispielen des Tutorials.
Antworten