exec(object[, globals[, locals]]) Cette fonction prend en charge l'exécution dynamique du code Python. L'objet doit être une chaîne ou un objet de code. S'il s'agit d'une chaîne, elle est analysée comme une série d'instructions Python et exécutée (sauf si une erreur de syntaxe se produit). Si la partie facultative est omise, le code s'exécutera dans sa portée actuelle.
Donc, ici, je mets une chaîne de caractères dans object et l'utilise.
eval
eval(expression, globals=None, locals=None) Prend une chaîne et des arguments optionnels globals, locaux. Si vous donnez des globaux, ce doit être un dictionnaire. Si vous donnez des locaux, cela peut être n'importe quel objet cartographique. L'argument expression est analysé et évalué comme une expression Python (techniquement une liste de conditions). Les dictionnaires globals et locals sont ensuite utilisés respectivement comme espaces de noms globaux et locaux.
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
Ici, exec exécute ʻa = 10, b = 13, print (a, b) . eval exécute ʻa + b
et renvoie sa valeur.
De plus, globals () est un dictionnaire, donc si vous donnez un dictionnaire comme argument, il y écrira.
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
Dans exec, a dans le dict vide est {'b': 1, 'c': 2}
.
Dans eval, globals est a, et les valeurs du dictionnaire a sont calculées. Donc, en réalité, nous calculons ʻa ['b'] + a ['c'] `.
Utilisez ceci pour essayer de l'utiliser comme "json.loads".
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]
Comme exec ne renvoie pas de valeur, vous devez définir la variable sous forme de chaîne. Si vous utilisez eval, il renverra une valeur, donc si c'est simple, vous pouvez l'utiliser comme json.
Exécuter une instruction python avec exec Évaluation d'une seule expression avec eval
Recommended Posts