Python-生成器对象-常见的内置函数
目录异常捕获(二)循环性质生成器对象的迭代值和索引值之间的比较自定义范围函数YieldPass值yield和返回比较生成器表达式公共内置函数
异常捕获(二)
尝试:
名字
e:除外
打印(“代码错误”)
else:
打印(代码正常后才会执行)
最后:
打印(代码无论是否异常都会运行)
#断言
名字='杰森'
assert isinstance(名称,字符串)
#主动抛出异常
引发零整除错误(“除数不能为0”)
for循环本质
d={ '姓名' : '杰森','年龄' : 18}
RES=d . _ _ ITER _ _()# stop iteration的异常,这是循环对象耗尽所有元素时出现的错误。
#同时实现循环打印
而True:
尝试:
打印(下一个__())
除了停止迭代为e:
破裂
#用于循环打印
因为我在d:
打印(一)
迭代取值与索引取值对比
迭代值
不要依赖索引来获取值。
值的顺序是从左到右固定的,不能重复获取。
给定值
值可以重复。
需要有序的容器类型来获取值(这不是一种常见的方式)
生成器对象
生成器实际上是一个自定义迭代器。
#定义阶段是一个普通的函数。
def my_generator():
打印(“第一次”)
产量11
打印('秒')
产量22
'''
当函数体包含yield关键字时,那么当第一次调用函数时
函数变成了生成器(迭代器),而不是执行函数体代码。
'''
Res=my_generator() #调用函数不会执行函数体代码,而是将函数变成一个生成器(迭代器)。
在0x7fcc5f7d3888打印(res) #生成器对象my_generator
Ret=res.__next__() #运行每__next__个代码,直到yield停止返回以下数据。
打印(ret) #第一\n 11页
Ret=res.__next__() #再次执行__next__,然后在上次停止的地方继续,然后在达到产量时停止。
打印(ret) #秒\n 22
自定义range功能
def my_range(开始,停止=无,步骤=1):
如果没有停止:
停止,开始=开始,0
同时开始停止:
屈服开始
开始=步骤
对于我的范围(2,10,2):中的I
打印(一)
yield传值
def generator_func1(年龄):
打印('年龄为%s ' % age ')
而True:
名称=产量
打印(' %s NB' %名称)
Res=generator_func1(18) #不会执行函数体代码,但会将其转换为生成器。
下一次会议
Res.send('json') #传递一个要让出的值。
Res.send('xxx') #再次传递要屈服的值。
yeild与return对比
同一点:可以返回值,支持多个,并组织成元组。
不同点:
屈服:
1.当函数体代码满足yield时,它不会结束,而是“停止”
2.yield可以将函数转化为生成器,并支持外部价值转移。
返回:
1.函数体代码在遇到return时直接结束。
生成器表达式
#列表生成公式
l1=[11,22,33,44,55,66
]
res = [i + 1 for i in l1 if i != 44]
print(res) # [12, 23, 34, 56, 67]
# 生成器表达式
'''生成器表达式内部的代码只有在迭代取值的时候才会执行'''
res1 = (i + 1 for i in l1 if i != 44)
print(res1) # generator object genexpr at 0x7fbbb7e96ca8
print(res1.__next__()) # 12
print(res1.__next__()) # 23
print(res1.__next__()) # 24
-
笔试题
# 求和 def add(n, i): return n + i # 调用之前是函数 调用之后是生成器 def test(): for i in range(4): yield i g = test() # 初始化生成器对象 for n in [1, 10]: g = (add(n, i) for i in g) """ 第一次for循环 g = (add(n, i) for i in g) 第二次for循环 g = (add(10, i) for i in (add(10, i) for i in g)) """ res = list(g) print(res) #A. res=[10,11,12,13] #B. res=[11,12,13,14] C. res=[20,21,22,23] #D. res=[21,22,23,24]
常见内置函数
1. abs() # 取绝对值
print(abs(-10)) # 10
2. all() any()
l = [11, 22, 0]
print(all(l)) # 所有元素为True才是True
print(any(l)) # 所有元素有一个为True就是True
3. bin() oct() hex()
print(bin(12)) # 0b1100 二进制
print(oct(12)) # 0o14 八进制
print(hex(12)) # 0xc 十六进制
4. bytes() str()
res = '测试'
ret1 = bytes(res, 'utf8')
print(ret1) # b'\xe6\xb5\x8b\xe8\xaf\x95'
ret2 = str(ret1, 'utf8')
print(ret2) # 测试
5. callable() # 是否看调用(看是否能加括号运行)
i = 1
def f():
pass
print(callable(i), callable(f)) # Flse True
6. chr() ord()
print(chr(65)) # A 按照ASICC码表的数字打印字符
print(ord('A')) # 65 按照ASICC码表的字符打印数字
7. complex() 复数
print(complex(123)) # (123+0j)
8. dir() # 查看当前对象可以调用的名字
def f():
pass
print(dir(f))
9. divmode() # 接收两个数字类型参数,返回一个包含商和余数的元组(a // b, a % b)
print(divmode(101, 10)) # (10 1)
应用:
# 生成页数
num, more = divmod(201, 10)
if more:
num += 1
print('总共需要%s页' % num)
10. eval() exec() # 将字符串内的内容加载执行
s1 = "print('hello')"
s2 = '''
for i in range(10):
print(i)
'''
eval(s1) # 只能执行简单的内容
exec(s2) # 可以执行复杂的内容
11. isinstance() # 判断是否属于某个数据类型
i = 1
print(isinstance(i, int)) # True
12. pow()
print(pow(4, 3)) # 64 4**3
13. round()
print(round(4.5)) # 4
print(round(4.6)) # 5
14. sum() # 求和
l = [11, 22, 33, 44]
print(sum(l)) # 110 将列表 l 中的元素求和
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/112512.html