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()
"""

posted @ 2019-07-23 16:24  犇羴鱻龘毳  阅读(122)  评论(0编辑  收藏  举报