本文主要介绍Python3.6.5标准库文档(完整中文版)---内置函数:enumerate(),eval(),exec()
返回一个枚举对象。iterable必须是一个序列,一个 迭代器或其他支持迭代的对象。 next()通过enumerate()返回的迭代器的方法 返回一个包含count的元组(从start开 始,默认值为0)以及从iterable迭代获得的值。
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
相当于:
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
参数是一个字符串和可选的全局变量和局部变量。如果提供,全局变量必须是字典。如果提供,本地可以是任何映射对象。
该表达参数分析,并作为一个Python
表达式来使用(从技术上来说,一个条件列表)全局 和当地人 的字典作为全局和局部名字空间。如果globals
字典存在并且缺少'__builtins__'
, 则 在解析表达式之前将当前全局变量复制到全局变量中。这意味着表达式通常可以完全访 问标准模块,并且传播受限制的环境。如果省略了本地字典,则默认为全局变量builtins
字典。如果两个字典都被省略,表达式会在eval()调用的环境中执行。返回值是评估表达式的结果。语法错误被报告为例外。例:
>>> x = 1
>>> eval('x+1')
2
这个函数也可以用来执行任意代码对象(比如那些创建的对象compile()
)。在这种情况 下,传递一个代码对象而不是一个字符串。如果代码对象已经被编译'exec'为 模式参数,那么eval()返回值将是None。
提示:该exec() 函数支持动态执行语句。的globals()
和locals()
功能返回当前全球和本地词典,分别,其可以是通过以绕过使用有用eval()或exec()。
请参阅有关ast.literal_eval()
可以安全地使用仅包含文字的表达式评估字符串的函数。
在所有情况下,如果省略可选部件,则代码将在当前范围内执行。如果只提供全局变量, 则它必须是一个字典,它将用于全局变量和局部变量。如果全局和 当地人给出,它们分别 用于全局和局部变量。如果提供,本地人可以是任何映射对象。请记住,在模块级别,全 局变量和本地变量是相同的字典。如果exec获取两个单独的对象作为全局变量和本地变 量,那么代码将被嵌入类定义中执行。
如果globals
字典不包含该键的值,则__builtins__
将该内置模块的字典引用 builtins插入该键的下方。通过这种方式,您可以通过在将自己的__builtins__
字典传递给全局变量之前,将其自己的字典插入到可执行代码中来控制可用的内置变量exec()
。
注意: 内置的函数globals()并分别locals()返回当前的全局和本地字典,这可能对传递用作第二个和第三个参数非常有用exec()。
注意: 默认本地人的行为如locals()下面的功能所述:不应尝试对默认本地人字典的修 改。传递一个明确的当地人解释,如果你需要看到的代码的作用当地人后的功能exec()恢复。