生成器和模块
生成器
生成器对象
生成器对象本质其实还是迭代器,只不过是程序员通过写代码自定义产生的迭代器对象
def func(a, b):
print('from func')
yield a
print('loaded func')
yield b
res = func(1, 2)
print(res) # <generator object func at 0x0000018316850A40>
print(res.__next__()) #
print(res.__next__())
自定义range方法
range方法其实是一个可迭代对象
# 首先,解决两个参数的情况
def my_range(a, b):
while a < b:
yield a
a += 1
for i in my_range(1, 12):
print(i)
# 接着,解决一个参数的情况
def my_range(a, b=None):
if not b:
b = a
a = 0
while a < b:
yield a
a += 1
for i in my_range(20):
print(i)
# 最后,解决三个参数的情况
def my_range(a, b=None, c=1):
if not b:
b = a
a = 0
while a < b:
yield a
a += c
for item in my_range(1, 20, 2):
print(item)
yield关键字作用
1.在函数体代码中出现,可以将函数变成生成器对象
2.在执行过程中,可以将后面的值返回出去,类似于return
3.还可以暂停代码的运行
4.还可以接收外界的传值
def delete(app_name):
print(f'正在查找{app_name}')
while True:
username = yield
print(f'{username}正在删除{app_name}')
res = delete('某剁手软件')
res.__next__() # 正在查找某剁手软件
res.__next__() # None正在删除某剁手软件
res.__next__() # None正在删除某剁手软件
res.__next__() # None正在删除某剁手软
res.send('tom') # send关键字不仅可以给yield传值,还会自动调用一次__next__()方法
res.send('sam') # send关键字不仅可以给yield传值,还会自动调用一次__next__()方法
模块
模块简介
- 什么是模块?
模块就是一系列功能的结合体,可以直接调用 - 为什么要用模块?
极大地提升程序员在实际工作中的开发效率 - 模块的三种来源
- 内置的模块
无需下载,python解释器自带,可直接导入使用 - 自定义模块
程序员自己写的代码,封装成模块;以后可以重复调用 - 第三方模块
在网上论坛下载的模块
- 模块的四种表现形式
- (1)使用python代码编写的py文件
- (2)多个py文件组成的文件夹,也称之为包
- (3)已被编译为共享库或DLL的c或C++扩展
- (4)使用C编写并连接到python解释器的内置模块
模块导入的两种方式
# 创建一个module.py文件
name = 'sam'
pwd = '123456'
l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
dic = {'name': 'tom', 'age': 25}
def func1():
print('from func1')
def func2():
print('from func2')
方式一
import module
print(module.name)
module.func1()
module.func2()
print(module.l1)
print(module.dic)
方式二
from module import name
print(name)
from module import func1
func1()
from module import func2
func2()
from module import dic
print(dic)
模块导入补充
一、可以给模块起别名
# 特别是模块名或者变量名比较长,可以起别名简写
# import md as m
# print(m.name)
# from md import name as n
# print(n)
二、连续导入多个模块或者变量名
import time, sys
from module import name, dic, func1, func2
print(time, sys)
print(name, dic, func1, func2)
三、通用导入
from module import *
print(name, l1, dic, func1, func2)