1,生成器
yield 生成器函数
def func():
print(111)
print(222)
yield 3
a = 1
b = 2
c = a + b
print(c)
yield 4
yield 5
yield 6
ret = func()
print(func())
print(next(func()))
print(next(func()))
# 一个next()对应一个yield ,运行完一个yield既停止运行,next数量大于yield时也会报错
return yield return:函数中只存在一个return 结束函数,并且给函数的执行者返回值。 yield:只要函数中有yield 那么他就是生成器函数而不是函数。 生成器函数中可以存在多个yield,yield不会结束生成器函数一个yield对应一个next
def func():
print(111)
yield 222
return 111
ret = func()
print(ret)
print(next(ret))
生成器使用的例子:
# 吃包子
# 一次性做出来500个包子(函数做的)
def func():
l1 = []
for i in range(1,501):
l1.append(f'{i}号包子')
return l1
ret = func()
print(ret)
# 吃一个做一个(生成器做的)
def gen_func():
for i in range(1, 501):
yield f'{i}号包子'
yield from
def func():
l1 = [1, 2, 3, 4, 5]
yield l1
ret = func()
print(next(ret)) # [1, 2, 3, 4, 5]
def func():
l1 = [1, 2, 3, 4, 5]
yield from l1
'''
# 等价于:
yield 1
yield 2
yield 3
yield 4
yield 5
'''
# 将l1这个列表变成迭代器返回
ret = func()
print(next(ret)) # 1
print(next(ret)) # 2
print(next(ret)) # 3
print(next(ret)) # 4
def func():
lst1 = ['卫龙', '老冰棍', '北冰洋', '牛羊配']
lst2 = ['馒头', '花卷', '豆包', '大饼']
yield from lst1
yield from lst2
g = func()
for i in g:
print(i)
2,列表推导式
用一行代码构建一个比较复杂有规律得列表
原来的方法
lis = []
for i in range(1, 11):
lis.append(i)
print(lis)
列表推导式
lis = [i for i in range(1, 101)]
print(lis)
列表推导式的两类
循环模式:
# 将十以内的所有整数的平方写入列表
lis = [i*i for i in range(1, 11)]
print(lis) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 将100以内的所有偶数写入列表
lis = [i for i in range(2, 101, 2)]
print(lis)
# 从python1期到python100期写入列表
lis = [f'python{i}期' for i in range(1, 101)]
print(lis)
筛选模式:
# 30以内能被3整除的数
lis = [i for i in range(1, 31) if i % 3 == 0]
print(lis) # [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
# 过滤掉长度小于3的字符串列表,并将剩下的转化成大写字母
li = ['fghfg','sdfh54565','ki','4','yjgy']
lis = [i.upper() for i in li if len(i) > 3]
print(lis) # ['FGHFG', 'SDFH54565', 'YJGY']
# 找到嵌套列表中名字含有两个'e'的所有名字
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
li = [i for i1 in names for i in i1 if i.count('e') == 2]
print(li)
总结: # 列表推导式:
缺点: 1,有毒:列表推导式只能构建比较复杂且有规律的列表。不能太着迷 2,超过三层才能构建成功的,就不建议使用列表推导式。 3,查找错误不行,不能进行调试 优点: 1,简单,一行解决
3,生成器表达式
与列表推导式的写法几乎一模一样。也有筛选模式,循环模式,多层循环构建 不同:把[] 变成 ()
print([i for i in range(1, 11)])
列表推导式与生成器表达式的区别:
写法上:[] () 专业角度:iterable iterator
4,字典推导式和集合推导式
# 字典推导式(了解) 两个字典的长度必须相同
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)
print(set(lst))
5,内置函数
python 提供了68个内置函数。
# 了解即可一带而过:
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()
# 重点讲解:
abs() enumerate() filter() map() max() min() open() range() print() len() list() dict() str() float() reversed() set() sorted() sum() tuple() type() zip() dir()
# 未来会讲:
classmethod() delattr() getattr() hasattr() issubclass() isinstance() object() property() setattr() staticmethod() super()
# 1:eval() **
# 剥去 字符创的外衣运算里面的代码。使用较少
s1 = '1 + 3'
print(s1) # 1 + 3
print(eval(s1)) # 4
s = "{'name':'alex'}"
print(eval(s)) # {'name': 'alex'}
# 在网络传输的str input 输入的时候,sql注入等等 绝对不使用eval()
# 2,exec() 与eval() 几乎一样,代码流
msg = """
for i in range(10):
print(i)
"""
print(msg)
print(exec(msg))
# 3,hash() 获取哈希值
print(hash('fgjfgbfbsdfb'))
# 4,help() **
# 打印或则获取对象的使用
print(help(str.find))
# 5,callable() ***
# 判断一个对象是否可调用,返回布尔值
s1 = 'sfdhs'
def func():
pass
print(callable(s1)) # False
print(callable(func)) # True
# 6,int():函数用于将一个字符串或数字转换为整型
print(int()) # 0
print(int('12')) # 12
print(int(3.6)) # 3
print(int('0100', base=2)) # 4
# 7,float():函数用于将整数和字符串转换成浮点数。
print(float()) # 0.0
print(float('12')) # 12.0
print(float(3.6)) # 3.6
# 8,complex():函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。
# 如果第一个参数为字符串,则不需要指定第二个参数
print(complex(1, 2)) # (1+2j)
# 9,bin() **:将十进制转换成二进制并返回。
print(bin(10), type(bin(10))) # 0b1010 <class 'str'>
# 10,oct() **:将十进制转化成八进制字符串并返回。
print(oct(10), type(oct(10))) # 0o12 <class 'str'>
# 11,hex() **:将十进制转化成十六进制字符串并返回。
print(hex(10), type(hex(10))) # 0xa <class 'str'>
# 12,divmod() **:计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。
print(divmod(7, 2)) # (3, 1)
# 13,round() **:保留浮点数的小数位数,默认保留整数。
print(round(7 / 3, 2)) # 2.33
print(round(7 / 3)) # 2
print(round(3.32567, 3)) # 3.326
# 14,pow() **:求x**y次幂。(三个参数为x**y的结果对z取余)
print(pow(2, 3)) # 8 两个参数为2**3次幂
print(pow(2, 3, 3)) # 2 ,三个参数为2**3次幂,对3取余。 (2**3)/3
print(pow(2, 4, 5)) # 1
# 15,bytes():用于不同编码之间的转化。
s = '你好'
bs = s.encode('utf-8')
print(bs) # b'\xe4\xbd\xa0\xe5\xa5\xbd'
s1 = bs.decode('utf-8')
print(s1) # 你好
bs = bytes(s, encoding='utf-8')
print(bs) # b'\xe4\xbd\xa0\xe5\xa5\xbd'
b = '你好'.encode('gbk')
b1 = b.decode('gbk')
print(b1.encode('utf-8')) # b'\xe4\xbd\xa0\xe5\xa5\xbd'
# 16,ord():输入字符找该字符Unicode编码的位置,256以内的是ASCII编码 超过256找Unicode编码
print(ord('a')) # 97
print(ord('中')) # 20013
# 17,chr():输入位置数字找出其Unicode编码对应的字符
print(chr(97)) # a
print(chr(20013)) # 中
# 17,repr():返回一个对象的string形式(原形毕露)
# %r 原封不动的写出来
name = 'taibai'
print('我叫%r' % name) # 我叫'taibai'
# repr 原形毕露
print(repr('{"name":"alex"}'), type('{"name":"alex"}')) # '{"name":"alex"}' <class 'str'>
print('{"name":"alex"}', type({"name": "alex"})) # {"name":"alex"} <class 'dict'>
# 18,all():可迭代对象中,全都是True才是True
print(all([1, 2, True, 0])) # False
# 19,any():可迭代对象中,有一个True 就是True
print(any([1, '', 0])) # True
更多内容可以查看自己学python的过程,简单笔记。-CSDN博客
更多内容可以查看自己学python的过程,简单笔记。-CSDN博客
更多内容可以查看自己学python的过程,简单笔记。-CSDN博客