>>> my_code = 'print("Hello world")' >>> exec(my_code) Hello world
Когда вам нужно значение выражения, используйте eval(string):
>>> x = eval("2+2") >>> x 4
Однако первым шагом должно быть спросить себя, действительно ли вам это нужно. Выполнение кода обычно должно быть крайней мерой: это медленно, некрасиво и опасно, если он может содержать введенный пользователем код. Вы всегда должны сначала посмотреть на альтернативные варианты, такие как функции более высокого порядка, чтобы увидеть, могут ли они лучше соответствовать вашим потребностям.
Ответ 2
В примере строка выполняется как код с использованием функции exec.
eval and exec are the correct solution, and they can be used in a safer manner.
As discussed in Python's reference manual and clearly explained in this tutorial, the eval and exec functions take two extra parameters that allow a user to specify what global and local functions and variables are available.
# make a list of safe functions safe_list = ['public_variable', 'public_function'] safe_dict = dict([ (k, locals().get(k, None)) for k in safe_list ]) # add any needed builtins back in safe_dict['len'] = len
>>> eval("private_variable+2", {"__builtins__" : None }, safe_dict) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 1, in <module> NameError: name 'private_variable'isnot defined
>>> exec("print \"'%s' has %i characters\" % (public_function(), len(public_function()))", {"__builtins__" : None}, safe_dict) 'public information' has 18 characters
>>> exec("print \"'%s' has %i characters\" % (private_function(), len(private_function()))", {"__builtins__" : None}, safe_dict) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 1, in <module> NameError: name 'private_function'isnot defined
In essence you are defining the namespace in which the code will be executed.
Ответ 4
Remember that from version 3 exec is a function!
so always use exec(mystring) instead of exec mystring.