python基础之内置函数解析之二

书接上文:
在这里插入图片描述茱莉亚罗伯茨镇楼!!!!

divmod(a, b)
它将两个(非复数)数字作为实参,并在执行整数除法时返回一对商和余数。对于混合操作数类型,
适用双目算术运算符的规则。对于整数,结果和 (a // b, a % b) 一致。对于浮点数,结果是
(q, a % b) ,q 通常是 math.floor(a / b) 但可能会比 1 小。在任何情况下,q * b + a %
b 和 a 基本相等;如果 a % b 非零,它的符号和 b 一样,并且 0 <= abs(a % b) < abs(b) 。

divmod(10,2)==>(5, 0)#返回为元组整除和余数
divmod(11.1,2)==>(5.0, 1.0999999999999996)
#浮点运算就不怎么靠谱了,建议还是用math模块吧

enumerate(iterable, start=0)
返回一个枚举对象。iterable 必须是一个序列,或iterator,或其他支持迭代的对象。enumerate()
返回的迭代器的__next__() 方法返回一个元组,里面包含一个计数值(从 start 开始,默认为 0)
和通过迭代 iterable 获得的值。

li=[
	'天下风云出我辈',
	'一入江湖岁月催',
	'皇图霸业谈笑中',
	'不胜人生一场醉',
	'提剑跨骑挥鬼雨',
	'白骨如山鸟惊飞']
for i in enumerate(li,1):
    print(i)
 ==>
(1, '天下风云出我辈')
(2, '一入江湖岁月催')
(3, '皇图霸业谈笑中')
(4, '不胜人生一场醉')
(5, '提剑跨骑挥鬼雨')
(6, '白骨如山鸟惊飞')

容我补上后两句:
尘事如潮人如水,只叹江湖几人回。
##########注释分割#########################
id(object)
返回对象的“标识值”。该值是一个整数,在此对象的生命周期中保证是唯一且恒定的。两个生命期不重叠的对象可能具有相同的id() 值。
就像你我我们的id是不同的!!!

a='小楼一夜听春雨'
b=['梦里花落知多少']
id(a)==>2841055982232
id(b)==>2841064088904
在你自己的电脑上打出也是不同的,因为我们不一样,不一样。。

input( [ prompt ] )
如果存在 prompt 实参,则将其写入标准输出,末尾不带换行符。接下来,该函数从输入中读取一
行,将其转换为字符串(除了末尾的换行符)并返回。

这个函数不过多解释大家都懂的对吧!!

map(function, iterable, …)
返回一个将 function 应用于 iterable 中每一项并输出其结果的迭代器。如果传入了额外的 iterable 参数,function 必须接受相同个数的实参并被应用于从所有可迭代对象中并行获取的项。当有多个可迭代对象时,最短的可迭代对象耗尽则整个迭代就将结束。

!!!注意返回的是迭代器,想获得迭代器的结果要么循环,要么用list或则tuple等函数展开。

a=[1,2,3,4,5,6]
b=['银烛秋光冷画屏','轻罗小扇扑流萤','天阶夜色凉如水','卧看牵牛织女星',]
list(map(str,a))==>['1', '2', '3', '4', '5', '6']

list(map(lambda x,y: str(x)+y,a,b))
==>['1银烛秋光冷画屏', '2轻罗小扇扑流萤', '3天阶夜色凉如水', '4卧看牵牛织女星']
此处只可意会,省略100字!!

filter(function, iterable)
用 iterable 中函数 function 返回真的那些元素,构建一个新的迭代器。iterable 可以是一个序列,一个支持迭代的容器,或一个迭代器。如果 function 是 None ,则会假设它是一个身份函数,即 iterable中所有返回假的元素会被移除。请注意,filter(function, iterable) 相当于一个生成器表达式,当 function 不是 None 的时候为 (item for item in iterable if function(item));function 是 None 的时候为(item for item in iterable if item) 。

a=[0,0,0,'',1,1,2,3,4,[]]
list(filter(None,a))==>[1, 1, 2, 3, 4]
#如果第一个参数为None,则返回每个元素bool值为真的元素

list(filter(lambda i :not i,a))==>[0, 0, 0, '', []]
#真真假假假假真真!!

下面是让人又爱又恨的两个函数:
爱本是恨得来处,一面温柔一面残酷!!

eval(expression [ , globals [ , locals ]] )
实参是一个字符串,以及可选的 globals 和 locals。globals 实参必须是一个字典。locals 可以是任何映
射对象。expression 参数会作为一个 Python 表达式(从技术上说是一个条件列表)被解析并求值,并使用globals 和 locals 字典作为全局和局部命名空间。如果 globals 字典存在且不包含以 __builtins__为键的值,则会在解析 expression 之前插入以此为键的对内置模块builtins 的引用。这意味着
expression 通常具有对标准builtins 模块的完全访问权限且受限的环境会被传播。如果省略 locals字典则其默认值为 globals 字典。如果两个字典同时省略,则表达式执行时会使用eval() 被调用的环境中的 globals 和 locals。请意,eval() 并没有对外围环境下的 (非局部) 嵌套作用域 的访问权限。返回值就是表达式的求值结果。

dic={
	'a':'天上白玉京',
	'b':'九楼十三层',
	'c':'仙人抚我顶',
	'd':'结发爱长生'}
#注意我传进去得是个字符串
eval('dic')==>#他还给我一个字典
{'a': '天上白玉京', 'b': '九楼十三层', 'c': '仙人抚我顶', 'd': '结发爱长生'}

eval('print(a)',{'a':123})===>123
虽然eval()很好用,但是提醒大家还是要慎重,特别是在接收用户输入得时候,因为eval的权限是有点大了。
eval()是由返回值的,返回值是表达式求值的结果

exec(object [ , globals [ , locals ]] )
这个函数支持动态执行 Python 代码。object 必须是字符串或者代码对象。如果是字符串,那么该字符串将被解析为一系列 Python 语句并执行(除非发生语法错误)。如果是代码对象,它将被直接执行。在任何情况下,被执行的代码都需要和文件输入一样是有效的(见参考手册中关于文件输入的
章节)。请注意即使在传递给exec() 函数的代码的上下文中,return 和 yield 语句也不能在函数定义之外使用。该函数返回值是 None 。无论哪种情况,如果省略了可选项,代码将在当前作用域内执行。如果只提供了 globals,则它必须
是一个字典(不能是字典的子类),该字典将同时被用于全局和局部变量。如果同时提供了 globals和 locals,它们会分别被用于全局和局部变量。如果提供了 locals,则它可以是任何映射对象。请记住在模块层级上,globals 和 locals 是同一个字典。如果 exec 得到两个单独对象作为 globals 和 locals,则代码将如同嵌入类定义的情况一样执行。如果 globals 字典不包含 builtins 键值,则将为该键插入对内建builtins 模块字典的引用。因此,在将执行的代码传递给exec() 之前,可以通过将自己的 builtins 字典插入到
globals 中来控制可以使用哪些内置代码。

exec(exec('for i in range(10): print(i)'))
==>
0
1
2
3
4
5
6
7
8
同样的语句eval是执行不了的,而exec可以,但是exec只注重过程,不要结果,所以没有返回值,而eval是有返回值的。

做事情要有始有终,美女收尾!!
在这里插入图片描述

发布了23 篇原创文章 · 获赞 5 · 访问量 370

猜你喜欢

转载自blog.csdn.net/weixin_43287121/article/details/105155587
今日推荐