迭代器总结
迭代器主要就是一个迭代取值,另外一种取值方式就是索引(下标)取值
l = [1, 2, 3, 4] res = l.__iter__() res.__next__() # 1 res.__next__() # 2
生成器
关键字:yield
def index(): print('from index') print('from index') yield 123,234,345 # 以元组的方式返回 print('second') yield 'hello' res=index() print(res) # <generator object index at...> 生成内存空间 res.__next__() # from index from index print(res.__next__()) # None (123,234,345) """和return用法几乎一样,但是yield会暂停,走一步停一步"""
yield和return的对比:
yield:
1. 代码遇到yield不会停止,而是停住
2. yield也可以有返回值,并且还支持多个,以元组的形式返回
3. yield可以把一个函数变成生成器,next取值return
1. 代码遇到return就会停止
2. return可以有返回值并且还支持多个,以元组的形式返回练习题:利用生成器的原理实现range函数的功能 for i in range(0,10): print(i)
def my_range(start, stop=None, step=1): if not stop: # 意味着只传了一个参数,stop没有值 stop = start start = 0 while start < stop: yield start start+=step for i in my_range(10): print(i)
生成器yield的其他用法
def eater(name): print('%s:正在吃...' % name) while True: food = yield print('%s正在吃%s' % (name, food)) res=eater('jerry') # 生成器对象:generator object print(res) # <generator object eater at 0x0000021869489B30> res.__next__() '''eater就变成了生成器'''
# send() : 传值给yield和执行__next__
res.send('包子') # jerry正在吃包子 res.send('水果') # jerry正在吃水果 res.send('水果') # jerry正在吃水果
生成器表达式
列表生成式
res = [name for name in names_list] print(res) # 就是一个列表
names_list = ['kevin', 'jerry', 'tony', 'oscar'] res1 = (name for name in names_list) print(res1) # <generator object <genexpr> at 0x00000218F4569CF0> 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) #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))
2、all():判断整个列表是否全部为真
print(all([1, 2, 3, True, False])) # False
3、any:判断列表中,一个为真,结果便是真
print(all([1, 2, 3, True, False])) # True
print(ascii('abc')) # 'abc' print(ascii('我就是很喜欢你呀')) # u7fd4u5687... 中文转成unicode
5、bin():转二进制
6、bool():把一个数值转为布尔类型
s = 'hello你还' res = s.encode('utf-8') print(res) print(res.decode('utf-8'))
res2=bytes(s, 'utf-8') print(res2) print(str(res2, 'utf-8'))
s1 = 'hello' print(callable(s1)) # False
9、chr():根据ASCII表将数字转为对应的字母
print(chr(65)) # A
10、ord:与chr相互转换
print(ord('A')) # 65
11、dir():查:看方法
print(dir[]) # 查看列表可用的方法 __iter__ def index(): pass # index.__name__ print(dir(index)) #查看index里可用的方法
12、divmod():拿到商和余数
divmod(99, 10) (9, 9) divmod(101, 10) (10, 1)
res = """print(123)""" eval(res) # print(123) 只能执行简单的 exec(res) # print(123) res = """ for i in range(10): print(i) """ exec(res) # 可以执行一些复制的python代码
今日思维导图:
原文地址:https://blog.csdn.net/qq_48064830/article/details/132877508
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_1221.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。