生成器
生成器本质就是一个迭代器
生成器与迭代器区别
迭代器是python自带的
生成器是程序猿自己写的
yield 会记录执行位置
在函数中将return改写成yield就是一个生成器
return和yield都是返回的值
return可以写多个,但是执行一次,yield可以写多个,也可以返回多个
一个__next__()对应一个yield
生成器可以使用for循环遍历
yield from__可以将迭代元素逐个返回
yield可以将for循环和while 循环进行临时暂停(函数内部)
生成器应用场景
#例子如下
def func():
for i in range(10):
yield i
A=func()
for i in range(2,6):
print(next(A))
生成器表达式与推导式
列表推导式分为两种模式:
1.循环模式:[变量(加工的变量) for 变量 in iterable]
2.筛选模式: [变量(加工的变量) for 变量 in iterable if 条件]
#例子如下将这个列表中大于3的元素留下来。
l1 = [4, 3, 2, 6, 5, 5, 7, 8]
print([i for i in l1 if i > 3])
#结果如下
[4, 6, 5, 5, 7, 8]
生成器表达式
生成器表达式和列表推导式的语法上一模一样,
只是把[]换成()就行了。
比如将十以内所有数的平方放到一个生成器表达式中
生成器表达式也可以进行筛选
生成器
gen = (i**2 for i in range(10))
print(gen)
# 结果: <generator object <genexpr> at 0x0000026046CAEBF8>
生成器表达式和列表推导式的区别:
列表推导式比较耗内存,所有数据一次性加载到内存。
而生成器表达式遵循迭代器协议,逐个产生元素。
得到的值不一样,列表推导式得到的是一个列表.生成器表达式获取的是一个生成器
列表推导式一目了然,生成器表达式只是一个内存地址。
列表推导式
l1 = [4, 3, 2, 6, 5, 5, 7, 8]
print([i for i in l1 if i > 3])
#结果如下
[4, 6, 5, 5, 7, 8]
字典推导式
lst1 = ['jay','jj','meet']
lst2 = ['周杰伦','林俊杰','郭宝元']
dic = {lst1[i]:lst2[i] for i in range(len(lst1))}
print(dic)
集合推导式
lst = [1,2,3,-1,-3,-7,9]
s = {abs(i) for i in lst}
print(s)
内置函数
all()
判断可迭代参数是否含有 0、空、None、False 的参数
如果不含有以上条件返回True
注意:空元组、空列表返回值为True,这里要特别注意。
例子如下
A=(1,2,3,())
print(all(A))
#结果元祖还有空元素
False
any()
any() 函数用于判断给定的可迭代参数
是否全部为 False,则返回 False,
如果有一个为 True,则返回 True。
元素除了是 0、空、FALSE 外都算 TRUE。
例子如下
print(any((0, '', False)))
#结果 都是空的不可迭代
False
bytes()
bytes 函数返回一个新的 bytes 对象,
该对象是一个 0 <= x < 256 区间内的整数不可变序列
它是 bytearray 的不可变版本
用于字符编码
例子如下
A="SkyRabbit"
b=bytes(A.encode('gbk'))
print(b)
#结果
b'SkyRabbit'
callable()
检查一个对象是否是可调用的
例子如下
def add(a, b):
return a + b
print(callable(add))
#结果如下
True
chr()
chr() 用一个整数作参数,返回一个对应的字符
例子如下
A=chr(97)
print(A)
#结果如下
a
complex()
函数用于创建一个值为
real + imag * j 的复数或者转化一个字符串或数为复数。
如果第一个参数为字符串,则不需要指定第二个参数。
例子如下
A=complex(1, 2)
print(A)
#结果如下
(1+2j)
divmod()
返回一个包含商和余数的元组(a // b, a % b)。
例子如下
A=divmod(6, 2)
print(A)
#结果如下
(3, 0)
eval()
函数用来执行一个字符串表达式,并返回表达式的值
例子如下
A=2
A=eval("6*A")
print(A)
#结果如下
12
exec()
exec 执行储存在字符串或文件中的 Python 语句
例子如下
A=exec('print("Hello World")')
#结果如下
Hello World
format()
格式占位符
例子如下
A="{} {}".format("hello", "world")
print(A)
#结果如下
Hello World
frozenset()
返回一个冻结的集合,
冻结后集合不能再添加或删除任何元素。
a = frozenset(range(10))
print(a)
#不可以被删除的
globals()
全局定义
hash()
用于获取取一个对象(字符串或者数值等)的哈希值。
help()
函数用于查看函数或模块用途的详细说明。
id()
函数用于获取对象的内存地址。
input()
获取用户输入
int()
函数用于将一个字符串或数字转换为整型。
iter()
函数用来生成迭代器。
#例子如下
lst = [1, 2, 3]
for i in iter(lst):
print(i)
#结果如下
1
2
3
locals()
函数会以字典类型返回当前位置的全部局部变量。
例子如下
def runoob(arg): # 两个局部变量:arg、z
z = 1
print (locals())
runoob(5)
#结果如下
{'z': 1, 'arg': 5}
next()
next() 返回迭代器的下一个项目。
oct()
函数将一个整数转换成8进制字符串。
例子如下
A=20
B=oct(A)
print(B)
#结果如下
0o24
ord()
ord() 函数是 chr() 函数ASCII 字符串的配对函数
例子如下
A='A'
B=ord(A)
print(B)
#结果如下
65#意思就是ASCL码表的65位
pow()
方法返回 xy(x的y次方) 的值。
例子如下
B=pow(2,3)
print(B)
#结果如下
8
repr()
函数将对象转化为供解释器读取的形式
例子如下
dict = {'runoob': 'runoob.com', 'google': 'google.com'};
B=repr(dict)
print(B)
#结果如下
{'runoob': 'runoob.com', 'google': 'google.com'}
round()
方法返回浮点数x的四舍五入值。
例子如下
B=round(70.23456)
print(B)
#结果如下
70
print(abs())#绝对值 返回都是正数
例子如下
lst =[1,2,3,-5]
print([abs(i)for i in lst])
enumerate(" 可迭代对象","序号的启始值")#_枚举 默认开始值是0
例子如下
lst =[5,2,8,-5]new_list=[]for i in enumerate(lst): new_list.append(i)print(new_list)
max()#求最大值
例子如下
print(max([5,8,9,11]))
min()#求最小值
例子如下
print(min([5,8,9,11]))
sum()#求总和
print(sum({2,6,4}))
python3
可迭代对象
g=range(0,10)
g = range(0, 10)
g.__iter__()
python2
是个列表
可迭代对象
g=range(0,10)
g = range(0, 10)
g.__iter__()
sep=""
多个元素链接符号
例子如下
print(1,5,8,sep=" *")
end=""
结尾的符号
例子如下
print(1,5,8,end=" *")
list()方法
例子如下
print(list("ABCDEFG"))
结果如下
#['A', 'B', 'C', 'D', 'E', 'F', 'G']
zip()#拉链 按照最少的进行合并
例子如下
lister=[1,3,5,7]
lister2=['a','b','c']
lister3=['alex','ewr','你好']
print(list(zip(lister,lister2,lister3)))
#结果如下
[(1, 'a', 'alex'), (3, 'b', 'ewr'), (5, 'c', '你好')]
dir()#查看当前函数的方法
format 进制类型转换
例子如下
print(format(5,"^20"))
print(format(1,"08b"))
#结果如下
# 5
#00000001
filter
例子如下
lister=[1,3,5,7]
print(list(filter(lambda x:x>3,lister)))
#结果如下
[5, 7]
map()#对象反射
对可迭代对象每个元素进行加工
例子如下
print(list(map(lambda x:x+1,[1,5,8,9])))
#结果如下
[2, 6, 9, 10]