Seite 1 von 1
Code einss Programms ergänzen
Verfasst: Donnerstag 16. Juni 2016, 17:01
von Brando
Hallo,
ich würde gerne ein Pythonprogramm schreiben, dass über eine Eingabe eine Codeergänzung des Programmes im Programm erzeugt und dann ausführt. Geht das?
Re: Code einss Programms ergänzen
Verfasst: Donnerstag 16. Juni 2016, 17:13
von BlackJack
@Brando: Das kommt darauf an was Du damit genau meinst. Schau Dir mal die `compile()`-Funktion und die ``exec``-Anweisung an.
Re: Code einss Programms ergänzen
Verfasst: Freitag 17. Juni 2016, 09:47
von Brando
Ich würde gern ein Pythonprogramm schreiben, welches ein return bspw. eine Matrix hat. Dann soll in einem anderen Pythonprogramm dieses Programm genutzt werden, wobei als Übergabeparameter das erste Pythonprogramm gegeben wird, dieses dann mit einem import im zweiten verzeichnet werden, und ausgeführt werden. Das zweite Pythonprogramm stellt dann die Matrix dar. Kann ich import Anweisungen festlegen, indem ich Übergabeparameter nutze, oder muss ich anders vorgehen?
Re: Code einss Programms ergänzen
Verfasst: Freitag 17. Juni 2016, 10:07
von Sirius3
@Brando: was Du suchst, sind Funktionen. Du kannst ein einem Modul (der richtige Name für importiertes Programm) Funktionen definieren, die Du aus einem anderen Modul heraus aufrufen kannst, indem Du ersteres importierst.
Re: Code einss Programms ergänzen
Verfasst: Freitag 17. Juni 2016, 10:22
von Brando
Das Problem ist, dass der Modulname wechseln kann. D.h. der import müsste wechselnde Namen haben, je nach Übergabeparameter in dem Darstellungsprogramm. Kann ich den import mit einem Variablennamen leisten, der im Darstellungsprogramm übergeben wird?
Re: Code einss Programms ergänzen
Verfasst: Freitag 17. Juni 2016, 10:33
von Sirius3
Schau Dir importlib an.
Re: Code einss Programms ergänzen
Verfasst: Freitag 17. Juni 2016, 13:10
von Brando
Hallo, also ich habe folgendes gemacht: Ein Programm mit dem Namen matrix_mult_module.py mit folgendem Code:
Code: Alles auswählen
from sympy.matrices import *
def rechne(A,B):
z=A*B
return z
Dann habe ich ein Programm in dem ich der Variable i_modul die Zeichenkette "matrix_mult_module.py" zuordne, und auch einen Import durchgeführt:
Code: Alles auswählen
i_progr=import_module(i_modul)
z=i_progr.rechne(x[0],x[1])
w=widgets.Textarea(
description='Matrix',
value = str(z),
)
display(w)
x[0] und x[1] sind zwei mal zwei Matrizen. Allerdings funktioniert der Code nicht. Es kommt folgende Fehlermeldung:
ImportError: No module named 'matrix_mult_module'
Ich arbeite mit Jupyter Notebook, und habe mein Programmmodule matrix_mult_module.py unter dem gleichen Ordner gespeichert, wie das Programm, welches das Modul nutzen soll. Was habe ich falsch gemacht? Ist der Speicherort der richtige? Ist die py Endung richtig? Habe ich im ausführenden Programm die richtigen Aufrufe und Methodenzuweisungen gemacht?
Re: Code einss Programms ergänzen
Verfasst: Freitag 17. Juni 2016, 13:17
von Sirius3
@Brando: der Modulename ist ohne Endung. Ob das Modul gefunden wird, oder nicht, hängt davon ab, ob bei Jupyter das aktuelle Verzeichnis im Suchpfad ist oder nicht.
Re: Code einss Programms ergänzen
Verfasst: Freitag 17. Juni 2016, 13:27
von Brando
Der Suchpfad muss eingetragen sein, da ja auch alle anderen Programme, die ich dort laufen lasse in diesem Pfad sind. Aber ist denn mein Programmansatz korrekt, insbesondere der Aufruf des Moduls? Den Error kann ich mir nicht erklären, soll ich vielleicht den Namen der Datei ohne py Endung übergeben. Zudem übergebe ich den Namen als String, muss ich vielleicht, wenn ich das Modul aktiviere etwas beachten, was das betrifft?
Re: Code einss Programms ergänzen
Verfasst: Freitag 17. Juni 2016, 14:06
von Sirius3
@Bando: die Meldung ist doch eindeutig: ImportError: No module named 'matrix_mult_module'
Das Modul matrix_mult_module ist nicht im Suchpfad.