exec 2. Integrierte Funktionen
exec(object[, globals[, locals]]) Diese Funktion unterstützt die dynamische Ausführung von Python-Code. Objekt muss eine Zeichenfolge oder ein Codeobjekt sein. Wenn es sich um eine Zeichenfolge handelt, wird sie als eine Reihe von Python-Anweisungen analysiert und ausgeführt (es sei denn, es tritt ein Syntaxfehler auf). Wenn der optionale Teil weggelassen wird, wird der Code in seinem aktuellen Bereich ausgeführt.
Also habe ich hier eine Zeichenkette in das Objekt eingefügt und sie verwendet.
eval
eval(expression, globals=None, locals=None) Nimmt eine Zeichenfolge und optionale Argumente global, lokal. Wenn Sie Globale geben, muss es ein Wörterbuch sein. Wenn Sie Einheimische angeben, kann es sich um ein beliebiges Zuordnungsobjekt handeln. Das Ausdrucksargument wird analysiert und als Python-Ausdruck ausgewertet (technisch gesehen eine Liste von Bedingungen). Die globalen und lokalen Wörterbücher werden dann als globale bzw. lokale Namespaces verwendet.
sample_exec.py
Python 3.5.0
>>> exec("a = 10; b = 13; print(a, b)")
10 13
>>> print(a, b)
10 13
>>> eval(`a + b`)
23
Hier führt exec "a = 10, b = 13, print (a, b)" aus.
eval führt a + b
aus und gibt seinen Wert zurück.
Außerdem ist globals () ein Wörterbuch. Wenn Sie also ein Wörterbuch als Argument angeben, wird es darauf geschrieben.
use_dict.py
Python 3.5.0
>>> a = dict()
>>> exec("b = 1; c = 2", globals(), a)
>>> a
{'b': 1, 'c': 2}
>>> eval("b + c", a)
3
In exec ist a im leeren Diktat "{'b': 1, 'c': 2}". In eval ist globals a und die Werte im Wörterbuch a werden berechnet. In Wirklichkeit berechnen wir also "a ['b'] + a ['c']".
Verwenden Sie dies, um zu versuchen, es wie 'json.loads' zu verwenden.
json_like.py
# exec
''' write file '''
a = [1,2,3,4,5,6]
b = [2,3,4,5,6,7]
with open('test.txt', 'w') as fout:
fout.write('num_list_a = ' + repr(a))
fout.write('num_list_b = ' + repr(b))
''' load file '''
exec(open('test.txt').read())
print('a =', num_list_a, '\nb =', num_list_b)
# eval
''' write file '''
a = [1,2,3,4,5]
with open('test2.txt', 'w') as fout:
fout.write(repr(a))
del a
''' load file'''
num_list_c = eval(open('test2.txt').read())
print('c =', num_list_c)
output.txt
a = [1, 2, 3, 4, 5, 6]
b = [2, 3, 4, 5, 6, 7]
c = [1, 2, 3, 4, 5]
Da exec keinen Wert zurückgibt, müssen Sie die Variable als Zeichenfolge definieren. Wenn Sie eval verwenden, wird ein Wert zurückgegeben. Wenn dies einfach ist, können Sie ihn wie json verwenden.
Führen Sie die Python-Anweisung mit exec aus Einzelausdrucksbewertung mit Bewertung
Recommended Posts