生成器初识
生成器本事就是迭代器.Python社区生成器与迭代器是一种.生成器与迭代器的唯一区别: 生成器是我们自己用Python代码构建的.
生成器生产方式
生成器函数
def func():
print(111)
yield
ret = func() #生成器对象
print(ret) #打印生成器地址
#只要函数中出现yield ,那么该函数就变成生成器函数
#一个next对应一个yield
#return 和yield区别
return 结束函数 给函数的执行者返回一个值 (如果多个值通过元祖返回)
yield 暂停函数 对应着给next返回值 (如果多个值通过元祖返回)
yield from
#区别: yield :对应next给next返回值
yield from 讲一个可迭代对象的每一个元素返回给next 节省代码,提升效率(代替了for循环)
生成器表达式
Python直接提供的一些内置函数.返回一个生成器
列表推导式,生成器表达式
列表推导式:一行代码构建一个有规律比较复杂的列表
l1 = [i for i in range(1,101)]
print(l1)
#两种构建方式:
1,循环模式:[变量(加工后的变量) for 变量 in iterable]
2.筛选模式:[变量(加工后的变量) for 变量 in iterable if 条件]
列表推导式的优缺点:
优点:简单,快捷,装逼
缺点:可读性不高 不好排错,慎用 不要入迷
生成器表达式
与列表推导式几乎一模一样
循环模式
obj = (i for i in range(1,11))
print(next(obj))
#如何触发生成器(迭代器)取值
1:next 2:for循环 for i in obj: print(i)
3:数据转换 print(list(obj))
#生成器表达式:节省内存
筛选模式
obj = (i fir i in range(1,11) if i > 10)
print(next(obj))
字典推导式 集合推导式
匿名函数
匿名函数只能构建简单的幻术,一句话函数
def func(x,y)
return x + y
print(1,2)
#匿名函数的构建
func2 = lambda x,y:x + y
print(func(1,2))
匿名函数最长用的就是与内置函数结合使用
内置函数
内置函数:Python中内置函数有68种.
str() dir() range() len() print() max() min() open() input() type() int() enumerate() list() id() set() dict() iter() next() tuple() bool() globals() locals() frozenset()
eval exce
eval('2 + 2') # 4
n=81
eval("n + 4") # 85
eval('print(666)') # 666
s = '''
for i in [1,2,3]:
print(i)
'''
exec(s)
hash:获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值。
print(hash(12322))
print(hash('123'))
print(hash('arg'))
print(hash('alex'))
print(hash(True))
print(hash(False))
print(hash((1,2,3)))
'''
-2996001552409009098
-4637515981888139739
1
2528502973977326415
'''
help:函数用于查看函数或模块用途的详细说明。
print(help(list))
print(help(str.split))
callable:函数用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。
name = 'alex'
def func():
pass
print(callable(name)) # False
print(callable(func)) # True
int:函数用于将一个字符串或数字转换为整型
print(int()) # 0
print(int('12')) # 12
print(int(3.6)) # 3
print(int('0100',base=2)) # 将2进制的 0100 转化成十进制。结果为 4
float:函数用于将整数和字符串转换成浮点数。
complex:函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数。
print(float(3)) # 3.0
print(complex(1,2)) # (1+2j)
bin:将十进制转换成二进制并返回。
oct:将十进制转化成八进制字符串并返回。
hex:将十进制转化成十六进制字符串并返回。
print(bin(10),type(bin(10))) # 0b1010 <class 'str'>
print(oct(10),type(oct(10))) # 0o12 <class 'str'>
print(hex(10),type(hex(10))) # 0xa <class 'str'>
divmod:计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。
round:保留浮点数的小数位数,默认保留整数。
pow:求x ** y次幂。(三个参数为x**y的结果对z取余)
print(divmod(7,2)) # (3, 1)
print(round(7/3,2)) # 2.33
print(round(7/3)) # 2
print(round(3.32567,3)) # 3.326
print(pow(2,3)) # 两个参数为2**3次幂
print(pow(2,3,3)) # 三个参数为2**3次幂,对3取余。
bytes:用于不同编码之间的转化。
# s = '你好'
# bs = s.encode('utf-8')
# print(bs)
# s1 = bs.decode('utf-8')
# print(s1)
# bs = bytes(s,encoding='utf-8')
# print(bs)
# b = '你好'.encode('gbk')
# b1 = b.decode('gbk')
# print(b1.encode('utf-8'))
ord:输入字符找该字符编码的位置
chr:输入位置数字找出其对应的字符
# ord 输入字符找该字符编码的位置
print(ord('a'))
print(ord('中'))
# chr 输入位置数字找出其对应的字符
print(chr(97))
print(chr(20013))
repr:返回一个对象的string形式(原形毕露)
# %r 原封不动的写出来
# name = 'taibai'
# print('我叫%r'%name)
print(repr('{"name":"alex"}'))
print('{"name":"alex"}')
all:可迭代对象中,全都是True才是True
any:可迭代对象中,有一个True 就是True
# all 可迭代对象中,全都是True才是True
# any 可迭代对象中,有一个True 就是True
# print(all([1,2,True,0]))
# print(any([1,'',0]))
print() 屏幕输出
''' 源码分析
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
"""
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
file: 默认是输出到屏幕,如果设置为文件句柄,输出到文件
sep: 打印多个值之间的分隔符,默认为空格
end: 每一次打印的结尾,默认为换行符
flush: 立即把内容输出到流文件,不作缓存
"""
'''
print(111,222,333,sep='*') # 111*222*333
print(111,end='')
print(222) #两行的结果 111222
f = open('log','w',encoding='utf-8')
print('写入文件',fle=f,flush=True)
dict() 通过相应的方式创建字典。
list
l1 = list('abcd')
print(l1) # ['a', 'b', 'c', 'd']
tu1 = tuple('abcd')
print(tu1) # ('a', 'b', 'c', 'd')
# dict
# 创建字典的几种方式
dic = {1: 2}
# # 字典推导式
print({i: 1 for i in range(3)})
# # dict()
dic = dict(one=1, two=2, three=3)
# print(dic)
fromkeys()
abs() 返回绝对值
i = -5
print(abs(i)) # 5
sum() 求和
print(sum([1,2,3]))
print(sum((1,2,3),100))
min() 求最小值
print(min([1,2,3])) # 返回此序列最小值
ret = min([1,2,-5,],key=abs) # 按照绝对值的大小,返回此序列最小值
print(ret)
# 加key是可以加函数名,min自动会获取传入函数中的参数的每个元素,然后通过你设定的返回值比较大小,返回最小的传入的那个参数。
print(min(1,2,-5,6,-3,key=lambda x:abs(x))) # 可以设置很多参数比较大小
dic = {'a':3,'b':2,'c':1}
print(min(dic,key=lambda x:dic[x]))
# x为dic的key,lambda的返回值(即dic的值进行比较)返回最小的值对应的键
max() 最大值与最小值用法相同。
reversed() 将一个序列翻转, 返回翻转序列的迭代器 reversed
l = reversed('你好') # l 获取到的是一个生成器
print(list(l))
ret = reversed([1, 4, 3, 7, 9])
print(list(ret)) # [9, 7, 3, 4, 1]
bytes() 把字符串转换成bytes类型
s = '你好太白'
bs = s.encode('utf-8')
print(bs)
结果:b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\xad\xa6\xe5\xa4\xa7'
s1 = bs.decode('utf-8')
print(s1)
结果: 你好太白
s = '你好'
bs = bytes(s,encoding='utf-8')
print(bs)
# 将字符串转换成字节
bs1 = str(bs,encoding='utf-8')
print(bs1)
# 将字节转换成字符串