1. Generator
Iterators and generators difference:
Iterator is a space-saving tools built into Python
The nature of the generator is a iterator
Iterator is Python comes
Is our generator (programmer) is written
Define a builder:
基于函数,
函数体中存在yield就是一个生成器
函数名() 就是产生一个生成器
def func():
print(123)
return "你好"
func()
def func():
if 3>2:
yield "你好" #停
if 4>2:
yield "我好"
yield "大家好"
g = func() # 产生一个生成器
print(g.__next__())
print(g.__next__())
print(g.__next__())
for i in g:
print(i)
The nature of the for loop
while True:
try:
print(g.__next__())
except StopIterration:
break
Builder advantages and Notes
Space-saving - inert mechanism
Not retrograde
Disposable
Corresponding to a yield a next
yield able to return to the content, but also be able to return many times
yield can temporarily stop the loop
A position capable of recording execution yield
output method
def foo():
for i in range(10):
pass
yield i
count = 1
while True:
yield count
count += 1
g = foo()
print(next(g)) # ---- 推荐使用
print(next(g))
print(next(g))
print(next(g))
print(next(g))
### 坑
如果不用变量接受,直接输出
print(foo().__next__())
print(foo().__next__())
一直循环输出#9
Builder application scenarios
def func():
lst = []
for i in range(100000):
lst.append(i)
return lst
print(func())
# 一次性打印全部结果,数据过大时特别消耗内存
def func():
for i in range(100000):
yield i
g = func()
for i in range(50):
print(next(g))
# 每次打印可选的一部分,不用的部分不打印,节省空间
yield from
element to an iterator object returned by one
def func():
lst = ["牛羊配","老奶奶花生米","卫龙","瞎扯淡","米老头","老干妈"]
for i in lst:
yield i
g = func()
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
# 牛羊配
# 老奶奶花生米
# 卫龙
# 瞎扯淡
# 米老头
def func():
lst1 = ["牛羊配","老奶奶花生米","卫龙","虾扯蛋","米老头","老干妈"]
lst2 = ["小浣熊","老干爹","亲嘴烧","麻辣烫","黄焖鸡","井盖"]
yield from lst1
yield from lst2
g = func()
print(next(g))
print(next(g))
print(next(g))
print(next(g))
# 牛羊配
# 老奶奶花生米
# 卫龙
# 虾扯蛋
# 所以循环第一个列表直到全部打印再循环第二个
2. derivations
Cycle mode
lst = []
for i in range(20):
lst.append(i)
print(lst)
转换list推导式
print([i for i in range(20)])
[变量 for i in range(20)]
Screening mode
lst = []
for i in range(20):
if i % 2 == 0:
lst.append(i)
print(lst)
转换成list表达式
[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)])
Cycle mode
生成器:
g = (i for i in range(20))
print(next(g))
print(next(g))
print(next(g))
# 0 1 2
转换成列表
print(list((i for i in range(20))))
Dictionary comprehension (understanding)
print({i:i+1 for i in range(10)})
print({i:i+1 for i in range(10) if i % 2 == 0})
{键:值 for循环 加工条件}
Set derivations (Learn)
print({i for i in range(10)})
print({i for i in range(10) if i % 2 == 0})
to sum up:
list:
[变量(加工后的变量) for循环]
[变量(加工后的变量) for循环 加工条件]
生成器表达式:
(变量(加工后的变量) for循环)
(变量(加工后的变量) for循环 加工条件)
字典推导式:
{键:值 for循环 加工条件}
集合推导式:
{变量(加工后的变量) for循环 加工条件}
3. The built-in function (a)
eval() 执行字符串类型的代码,并返回最终结果
exec() 执行字符串类型的代码
以上两个函数很强大,工作中禁止使用
hash() 获取一个对象(可哈希对象:int,str,bool,tuple)的哈希值
help() 函数用于查看函数或模块用途的详细说明
callable() 函数用于检查一个对象是否是可调用的,如果返回True,仍然可能调用失败;但如果返回False,调用对象object绝对不会成功
int() 函数用于将一个字符串或数字转换为整型
float() 函数用于将整数和字符串转换成浮点数
complex:函数用于创建一个值为 real + imag*j 的复数.如果第一个参数为字符串,则不需要指定第二个参数
bin() 将十进制转换成二进制
oct() 将十进制转换成十六进制字符串并返回
divmod() 计算除数与被除数的结果,返回一个包含商和余数的元组
round() 保留浮点数的小数位数,默认保留整数
pow() 求x**y次幂
bytes() 用于不同编码之间的转化
ord() 输入当前编码的位置数字找出其对应的字符
repr() 返回一个对象的string形式
all() 可迭代对象中,全都是True才是True
any() 可迭代对象中,有一个True 就是True