龙空技术网

Python学习进阶教程(3)—内置函数(之三)

科技湾区 65

前言:

眼前看官们对“c语言 exec函数返回值”大体比较珍视,姐妹们都想要知道一些“c语言 exec函数返回值”的相关知识。那么小编同时在网上汇集了一些有关“c语言 exec函数返回值””的相关文章,希望同学们能喜欢,我们快快来学习一下吧!

(本号正在连续推出以Python官网文档为主线的完整的系统的学习Python的系列文章和视频,感兴趣的朋友们欢迎搜索关注。本文及后续文章如无特别声明均以Windows平台作为演示平台,Python版本为:3.8.1)

【注意:开始学习“Python学习进阶教程”系列内容前须已经学习过“Python学习入门教程”系列内容】

enumerate(iterable, start=0)

返回一个枚举对象。iterable必须是序列、迭代器或其他支持迭代的对象。enumerate()返回的迭代器的__next__()方法返回一个元组,该元组包含一个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

eval(expression[, globals[, locals]])

参数是一个字符串和可选的全局变量和局部变量。如果提供了globals,那么它必须是一个字典。如果提供了locals,则其可以是任何映射对象。

expression参数将被解析为一个Python表达式(从技术上讲,一个条件列表),解析过程使用globals字典和locals字典作为全局和局部命名空间。如果globals字典存在,并且不包含键_builtins__的值,则在解析表达式之前,将对内置模块builtins的字典的引用插入到该键下。这意味着表达式通常可以完全访问标准builtins,并传播受限制的环境。如果省略了locals字典,则locals默认为globals字典。如果省略了这两个字典,则使用调用eval()的环境中globals和locals来执行表达式。注意,eval()不能访问封闭环境中的嵌套作用域(非局部变量)。

返回值是求值表达式的结果。语法错误被报告为异常。

例子:

>>> x = 1>>> eval('x+1')2

这个函数还可以用来执行任意的代码对象(比如那些由compile()创建的代码对象)。在这种情况下,传递的是代码对象而不是字符串。如果将代码对象编译时以'exec'作为模式参数,那么eval()的返回值将为None。

提示:exec()函数支持语句的动态执行。globals()和locality()函数分别返回当前的全局和本地字典,可以传递给eval()或exec()。

该函数会引发以代码对象为参数的审计事件exec。还可能引发代码编译事件。

exec(object[, globals[, locals]])

这个函数支持Python代码的动态执行。对象必须是字符串或代码对象。如果是字符串,则将字符串解析为一组Python语句,然后执行这些语句(除非出现语法错误)。如果它是一个代码对象,它只是被执行。在所有情况下,所执行的代码都应该作为文件输入也是有效的。注意,return和yield语句不能在函数定义之外使用,也不能在传递给exec()函数的代码上下文中使用。该函数返回值为None。

在所有情况下,如果可选部分被省略,代码将在当前作用域内执行。如果只提供了globals,那么它必须是一个字典(而不是dictionary的子类),并将同时用于全局变量和局部变量。如果给定了globals和locals,它们分别用于全局变量和局部变量。如果提供了局部变量则其可以是任何映射对象。请记住,在模块级,全局变量和局部变量是相同的字典。如果exec获得两个单独的对象作为globals和locals,那么代码就像嵌入到类定义中一样执行。

如果globals字典不包含关键字__builtins__的值,则在该关键字下插入对内置模块builtins的字典的引用。通过这种方式,可以在将自己的_builtins__字典插入globals中,然后再将其传递给exec(),从而控制执行的代码可用哪些内建对象。

该函数会引发以代码对象为参数审计事件exec。还可能引发代码编译事件。

注意:

内置函数globals()和locals()分别返回当前的全局和局部字典,可作为exec()的第二个和第三个参数。默认locals的作用与对函数locals()的描述相同:不应该尝试修改默认locals字典。如果需要在函数exec()返回后查看代码对locals的影响,请传递一个显式locals字典。

filter(function, iterable)

使用iterable中能使得函数返回真的元素构造一个迭代器。iterable可以是序列、支持迭代的容器或迭代器。如果函数为None,则假定其为恒等函数,也就是说,iterable中所有为假的元素都将被删除。

注意,如果function不为None ,filter(function, iterable)等价于generator表达式(item for item in iterable if function(item));如果function为None等价于generator表达式(item for item in iterable if item)。

class float([x])

返回由数字或字符串x构造的浮点数。

如果参数是一个字符串,那么它应该包含一个小数,在前面可有或无符号,前后可有或无空格。符号可以是“+”或“-”;“+”符号对产生的值没有影响。参数也可以是表示NaN (not-a-number)的字符串,或者是正无穷或负无穷。更准确地说,输入必须符合以下语法后,前导和尾随空白字符被删除:

sign           ::=  "+" | "-"infinity       ::=  "Infinity" | "inf"nan            ::=  "nan"numeric_value  ::=  floatnumber | infinity | nannumeric_string ::=  [sign] numeric_value

在这里,floatnumber是Python浮点字面值的形式。大小写不重要,所以,例如,“inf”、“Inf”、“INFINITY”和“iNfINity”都是表示正无穷可接受的拼写。

否则,如果参数是整数或浮点数,则返回具有相同值的浮点数(在Python的浮点精度内)。如果参数超出Python浮点数的范围,则会引发OverflowError。

对于一般的Python对象x, float(x)会委托给x._ float__()。如果没有定义__float__(),那么它就会返回到__index__()。

如果没有给出参数,则返回0.0。

例子:

>>> float('+1.23')1.23>>> float('   -12345\n')-12345.0>>> float('1e-003')0.001>>> float('+1E6')1000000.0>>> float('-Infinity')-inf

format(value[, format_spec])

将值转换为由format_spec控制的“格式化”表示形式。format_spec的解释将取决于参数value的类型,但是大多数内置类型都使用标准的格式化语法:Format Specification Mini-Language。

默认的format_spec是一个空字符串,它通常会产生与调用str(value)相同的效果。

对format(value, format_spec)的调用被转换为type(value) .__format__(value, format_spec)。它在搜索value的__format__()方法时绕过实例字典。如果方法搜索抵达object且format_spec非空,或者如果format_spec或返回值不是字符串,则会引发TypeError异常。

class frozenset([iterable])

使用的元素创建一个新的frozenset对象,如果没指定iterable则创建一个空的frozenset对象。frozenset是一个内置类,在Python学习入门(12)—集合中已经介绍过。

getattr(object, name[, default])

返回对象的name属性的值。名称必须是字符串。如果字符串是对象的一个属性的名称,那么结果就是该属性的值。例如,getattr(x, 'foobar')等价于x.foobar。如果指定的属性不存在,则默认返回,否则会引发AttributeError。

globals()

返回表示当前全局符号表的字典。这总是当前模块的字典(在函数或方法中,这是定义它的模块,而不是调用它的模块)。

【关于"标准库内置函数"的内容本篇未完,下篇将继续讲解】

【结束】

篇尾寄语:万丈高楼平地起,是否具有扎实的基础决定一个人能否走远以及能走多远。Python的学习也是同样的道理!

标签: #c语言 exec函数返回值