Day 12 生成器,推导式,内置函数一
迭代器:python中内置的一种节省的工具
生成器的本质就是一个迭代器
迭代器和生成器区别:一个是python自带的,一个是自己写的
写一个生成器:
def func():
print(123)
return '你好'
func()
将return编程yield就是一个生成器
def func():
if 2:
yield '你好'
if 1:
yield '我好'
if 3:
yield '大家好'
g = func()#产生一个生成器
print(g.next())
print(g.next())
print(g.next())
for i in g:
print(i)
def foo():
for i in range(10):
pass
yield i
count = 1
while True:
yield count
count += 1
g = foo()
for i in g:
print(i)
print(g.next())
print(g.next())
send()自己了解
坑--会产生新的生成器
print(foo().next())
print(foo().next())
解决
g = foo()
print(next(g))
python2 中没有__next__
g.iter()
g.next()
在函数中将return改写乘yield就是生成器
yield和return 也是返回
yeild会记录执行位置
return可以写多个,但是只执行一次
一个__next__对应一个yield
生成器可以使用for循环获取值
yield from -- 将可迭代对象元素逐个返回
send() 了解
在函数的内部,yield 能将for循环和while循环临时停止
生成器应用场景:
def func():
lst = []
for i in range(100):
lst.append(i)
return lst
print(func())
def func():
for i in range(100):
yield i
g = func()
for i in range(2):
print(next(g))
def func():
lst = ['牛羊配','老奶奶花生米','卫龙','虾扯蛋','米老头','老干妈']
for i in lst:
yield i
g = func()
print(next(g))
def func():
lst = ['牛羊配','老奶奶花生米','卫龙','虾扯蛋','米老头','老干妈']
yield from lst
g = func()
for i in g:
print(i)
推导式
lst = []
for i in range(20):
lst.append(i)
print(i)
list推导式
print([i for i in range(20)])
循环推导式
[变量 for i in range(20) ]
筛选模式
lst = []
for i in range(20):
if i % 2 == 0:
lst.append(i)
print(lst)
print([i for i in range(20) if i % 2 == 0])
[变量(加工后的变量) for循环 加工方式]
print([i for i in range(50) if i % 2 == 1])
print([i for i in range(1,50,2)])j
生成器表达式
循环模式
g = (i for i in range(20))
print(next(g))
print(next(g))
print(next(g))
筛选模式
g = (i for i in range(50) if i % 2 == 1)
for i in g:
print(i)
字典推导式(了解)
print({i:i+1 for i in range(20)})
print({i:i+1 for i in range(20) if i % 2 == 1})
集合推导式
print({i for i in range(20) if i % 2 == 1})
list
[变量(加工后的变量) for循环]
[变量(加工后的变量) for循环 加工条件]
生成器表达式
(变量(加工后的变量) for循环)
(变量(加工后的变量) for循环 加工条件)
字典推导式:
集合推导式:
内置函数模块一(不常用)
s = """
for i in range(10)
print(i)
"""
print(exec(s))
s1 = """
for i in range(10)
print(123)
func()
"""
print(exal(s))
print(exec(s1))
print(hash('12')) 哈希
print(help(list)) 帮助查看:打印源码
def func():
pass
print(callable()) 判断是否可调用,返回的是bool
print(float(2)) #浮点数
print(complex(56)) #复数
print(bin())十进制转二进制
print(oct(15)) #二进制转八进制
print(hex(15)) #二进制转十六进制
print(divmod(5,2)) 取商取余
print(round(5.3234,2)) 四舍五入---默认整数,可指定小数位数
print(pow(2,3)) 幂函数
print(pow(2,3,4))
s= 'alex'
print(bytes(s.encode(s)))
print(ord('你')) # 当前编码 只能一个字一个字找.AECII
print(chr(20320)) 通过码位找字
s ='C:\u3000'
print(repr(s)) 是什么就打什么
print('C:\u3000你好')
lst = [1,2,3,4,5,0]
print(all(lst)) 判断元素是否都为真 相似and
print(any(lst)) 判断元素中是否有真 相似or
name = 1
def func():
print(123)
print(globals()) #查看全局空间的变量
print(locals()) #查看当前空间的变量
今日总结
1.生成器
定义一个生成器
基于函数
函数题中存在yield就是一个生成器
函数名()就是产生一个生成器
生成器的本质就是一个迭代器
生成器和迭代器的区别:
迭代器是python自带的
生成器是程序员写的
生成器:
节省空间---惰性机制
不能逆行
一次性
一个next对应一个yield
yield能够进行返回内容,还能返回多个参数
yield能够零食停止循环
yield能够记录窒执行位置
yirld from --将一个可迭代对象的元素逐个返回
2.推导式
list:[变量(加工后的变量)for循环 加工条件]
dict:{键:值 for循环 加工条件}
set:{变量(加工后的变量)for循环 加工条件}
生成器表达式:(变量(加工后的变量)for循环 加工条件)
1.不同循环推导
2.筛选推导
推导式测试
li = [i*i for i in range(1,11)]
print(li)
li = [i*i for i in range(1,20) if i % 2 == 0]
print(li)
1-24期添加到列表中
li = [f"python{i}" for i in range(1,25)]
print(li)
把列表中大于3的元素留下来
lst = [123,4,22,512,1,4,1,2,3,1,2,]
print([i for i in lst if i > 3])
3.内置函数一
"""
all() any() bytes()
callable()
chr() complex()
divmod() eval()
exec() format()
frozenset() globals()
hash() help() id() input()
int() iter() locals()
next() oct() ord()
pow() repr() round()
"""