python exec在哪里?

2024-04-25 23:38:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道可以通过以下方式访问内置函数:

object().__reduce__()[0].__globals__["__builtins__"]

这似乎适用于大多数功能。但是,我似乎找不到exec()。我很确定它是一个内置函数,那么它为什么不出现在__builtins__中呢?eval()和{}都在那里。在

我使用的是python2.7

[编辑]

获取全局变量的一种更简单的方法是使用内置函数globals():),因此可以将上述内容简化为: globals()['__builtins__'].__dict__


Tags: 方法函数功能编辑reduce内容objecteval
2条回答

exec是一个关键字,类似于print。因此,它是一个函数。在

如果您可以尝试分配它:

>>> print = 3
  File "<stdin>", line 1
    print = 3
          ^
SyntaxError: invalid syntax
>>> exec = 3
  File "<stdin>", line 1
    exec = 3
         ^
SyntaxError: invalid syntax
>>> eval = 3
>>> 

如果您执意要调用exec,而不使用单词exec,那么您可以这样做:

^{pr2}$

它滥用cpythonapi来执行一段代码(可以任意长)。在

如果需要控制全局变量和局部变量,请使用PyRun_String

Py_file_input = 257 # Include/Python.h
def my_exec(s, _globals, _locals):
    return ctypes.pythonapi.PyRun_String(s, Py_file_input, ctypes.py_object(_globals), ctypes.py_object(_locals))

my_exec("print 3 + 3", globals(), locals())

在Python 2.x中,^{} is a statement,不是函数:

>>> # Python 2.x interpreter
>>> 'exec' in dir(__builtins__)
False
>>> callable(exec)  # This would return True if exec was a function
  File "<stdin>", line 1
    callable(exec)
                ^
SyntaxError: invalid syntax
>>>

但是在python3.x中,exec是{a2}:

^{pr2}$

相关问题 更多 >