生成器及常见内置函数

for循环本质

d = {'name','lee', 'pwd', '123', 'hobby','read'}
res = d_iter_()
while True:
    try:
        print(res._next_())
    excpet StopIteration as e:
        baeak
        
for i in d
	print(i)

迭代取值与索引取值对比

迭代取值
	优点
    	不依赖索引取值的一种方法
	缺点
    	取值顺序永远都是从左往右,无法重复取值
索引取值
	优点
    	可以重复取值
    缺点
    	需要有容器猜可以取值
     

生成器对象

生成器其实就是自定义迭代器

定义阶段就是一个普通函数
def my_age():
    print('first')
    yield 111, 222, 333
    print('second')
    yield  555 666 777

    """函数体有yield关键字,那么第一次调用函数时不会执行函数体代码
		而是将函数变成了生成器"""
    
# 函数:不执行函数体代码 而是转换为生成器(迭代器)
# res = my_ge()
# ret = res.__next__()  # 每执行一个__next__代码往下运行到yield停止 返回后面的数据
# print(ret)
# ret = res.__next__()  # 再次执行__next__接着上次停止的地方继续往后 遇到yield再停止
# print(ret)

自定义range功能

  # yield方法
def my_range(start, stop=None, step=1):
    if not stop:  # 如果不会结束		
        stop = start
        start = 0
    while start < stop:
        yield start
        start += step
res = my_range(10)
for i in res:
    print(i)
    
  # for循环
res = my_range(1, 10)
for i in res:
    print(i)

补充yield传值

def eat(name):
    print('%s 准备干饭!' % name)
    while True:
        food = yield
        print('%s正在吃%s' % (name, food))
res = eat('jason')  # 并不会执行代码,而是转换成生成器
res._next_()
res.send('包子')
res.send('胡辣汤')

yield与return对比

yield
	1.可以返回值(支持多个并组织成元组)
    2.函数体代码遇到yield不会结束只是停住
    3.yield可以将函数变成生成器,并且可以传值
    
return
	1.可以返回值(支持多个并组织成元组)
    2.函数体代码遇return直接结束

生成器表达式

l = [11, 22, 33, 44, 55, 66, 77, 88, 99]
# 普通方法
# res = [i + 1 for i in l if i != 55]
# print(res)
# 生成器表达式
res1 = (i + 1 for i in l if i != 55)

# 生成器表达式内部代码只有在迭代取值的时候才会执行
print(res1.__next__())
print(res1.__next__())

'''迭代器对象,生成器对象,都可以看成是'工厂',
   当需要的数据的时候才会出现加工'数据'
        主要是为了节省内存空间
'''

求和

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)
res = list(g)
print(res)
# 执行结果 [20,21,22,23]

常见内置函数

1 .abs()	绝对值
	print(abs.(46))
    print(abs.(-46))
    
2 .all()  any() 
	l = [11,22,33,0]
    print(all(l))  # 所有元素都为True结果才是True	  0是None
    pring(any(l))  # 所有元素只要有一个为True,结果就是True
    
3 .bin()  .oct()  .hex()  进制数   

4 .bytes()  str()  # 解码编码
   res = '我命由我不由天'
   res1 = bytes(res,'utf8')
   print(res1)
   res2 = str(res1,'utf8')
   print(res2)
   res1 = res.encode('utf8')
   print(res1)
   res2 = res1.decode('utf8')
   print(res2)
   
5 .callable()  # 是否可以调用(能不能加括号运行) 
6 .chr()  ord()
	print(chr(72))  # 根据ASCIIC码数字找字符
    print(ord('A'))  # 根据字符找数字
    
7 .complex()  # 复数

8 .dir()  # 查看当前对象可调用的名字

9 .divmod()
	 print(divmod(101,10))
"""总数据100 每页10条  10页"""
"""总数据99  每页10条  10页"""
"""总数据101 每页10条  11页"""
     num,more = divmod(233,10)
	 if more:
     num += 1
	 print('总共需要%s页'%num)
        
10 .eval()  # 只能识别简单的语法  exec()可以识别复杂语法  都是将字符串中的数据内容加载并执行
 	res = 
    你好啊
    for i in range(10):
    print(i)
    res = print('hello world')
    eval(res)
    exec(res)     
11 .isinstance()  # 判断是否属于某个数据类型  布尔值的形式

12 .pow()
	print(pow(4, 3))  # 4的3次方
    
13 .round()  # 四舍五入的意思,在python 五舍六入

14 .sunm()  # 求和   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值