Day17

总结

生成器对象

# 本质上还是迭代器

def index():
    print('1')
    yield 2
    yield 3
    print('4')
    yield 5, 6

res = index()  # 加括号调用并接收结果:不执行代码 而是变成生成器对象
print(res.__next__())  # 1 2
print(res.__next__())  # 1 2 3
print(res.__next__())  # 1 2 3 4 (5, 6)
print(res.__next__())  # 报错 StopIteration
 '''
 	当函数体代码有yield关键字时,第一次调用函数并不会执行函数体代码,而是将函数变成生成器
 	函数体代码中含有多个yield关键字  执行一次__next__返回后面的值并且让代码停留在yield位置
 	再执行__next__则基于上次位置继续往后执行到下一个yield关键字处
 	如果没有yield再执行__next__就会报错
 '''   

自定义range方法

# 用生成器模拟range方法(range方法本质是一个可迭代对象)
def my_range(start, end=None, step=1):# end设为默认可以满足一个参数的情况
    if not end:  # 没有给end传值
        end = start
        start = 0
    while start < end:
        yield start
        start += step
for i in my_range(10):
    print(i)

yield关键字

'''
	1.可以将函数变成生成器
	2.在执行过程中,可以将后面的值返回出去 类似return
	3.暂停代码的运行
	4.接受外界的传值(send)
'''
def func(name):
    print(f'{name}准备上课了')
    while True:
        lesson = yield
        print(f'{name}要上{lesson}')
res = func('jason')
res.__next__()  # jason准备上课了
res.send('英语课')  # jason要上英语课   send可以给yield传值,并且自动执行一次__next__()

生成器表达式

# 节省存储空间,在代码优化时实用

res = (i for i in 'abcde')
print(res)  # <generator object <genexpr> at 0x000001A981F93CA8>
print(res.__next__())  # a
# 生成器内部的代码只有在调用__next__迭代取值的时候才会执行

模块

# 1.模块就是一系列功能的综合体,可以极大效率提升开发效率
# 2.模块的来源
    1.内置模块
        解释器自带的
    2.自定义模块
        自己写的代码封装的模块
    3.第三方模块
        别人发布到网上的
# 3.模块的四种表现形式
	1.python代码编写的py文件
    2.多个py文件组成的包
    3.已被编译为共享库或DLL的c或C++扩展
    4.使用C编写并链接到python解释器的内置模块

模块的导入方式

# 1.import...
import 导入的是被导入文件,import所在的是执行文件
import md  # i = 1  
i = 2
print(md.i)  # 1
print(i)  # 2
# 2.from...import... 可以导入指定的字段
from md import i   # i = 1
print(i)  # 1
i = 2
print(i)  # 2
'''
	重复导入只会导入一次
	在使用from...import... 时一定要避免名字冲突
	使用from...import...只能拿里面存在的,不然会报错
'''

# 3.可以给模块起别名
import panda as pd
# 4.连续导入多个模块
import time,md
模块之间有相似之处可以连续导入多个模块,没有的话最好分开导入
# 5.通用导入
from md import *
'''
	如果模块文件使用了__all__限制可以使用的名字,*就会失效,根据__all__后规定的名字导入
'''

作业

:

:

明天周五了,不能松懈啊

:

posted @ 2022-03-24 19:40  有梦想的阿九  阅读(38)  评论(0)    收藏  举报