In Python, warum nicht ein import in ein exec in einer Funktion arbeiten?

Kann ich eine import-Anweisung in einem string, exec, und es funktioniert (druckt einen random digit):

code = """
import random
def f():
    print random.randint(0,9)
"""

def f():
    pass

exec code
f()

Nun, wenn ich exec code und f() in Ihre eigene Funktion und nennen Sie es, es funktioniert nicht.

def test():
    exec code
    f()

test()

Er sagt NameError: global name 'random' is not defined.
Keine Ahnung, was Los ist???
Dank

  • Neugierig, warum würden Sie wollen, dies zu tun?
  • Dies ist Zeichen für schlechtes design - vermeiden.
  • +Vincent Savard, arbeite ich mit einem Java-basiertes Produkt, mit dem mich schreiben Python-Skripte in es, und kann ich konfigurieren mein Skript ausgeführt werden, wenn bestimmte vordefinierte Ereignisse eintreten. Allerdings kann ich verwenden der standard-import-Anweisung zum laden einer anderen eines meiner scripts, wenn ich es will, seine Funktionen zu verwenden, wie eine Bibliothek. Stattdessen muss ich laden den code des anderen script aus der Datenbank und exec() werden. Und das problem kommt dadurch, dass Sie anderen Skript importiert Java-Bibliotheken, die ich nicht, in dem Fall den Aufruf einer library-Funktion bewirkt, dass das beschriebene problem durch +Alex Varga
InformationsquelleAutor Alex Varga | 2012-09-20
Schreibe einen Kommentar