Seite 1 von 1

Aktualisieren von Import

Verfasst: Freitag 17. April 2009, 10:40
von planktom
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

Verfasst: Freitag 17. April 2009, 10:53
von EyDu
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.

Verfasst: Freitag 17. April 2009, 12:38
von planktom
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

Verfasst: Freitag 17. April 2009, 12:46
von cofi
`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.

Verfasst: Freitag 17. April 2009, 12:47
von EyDu
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.

Verfasst: Freitag 17. April 2009, 12:59
von planktom
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.