一.模块
1.什么是模块化
模块化是指将一个程序分解成一个一个小的模块
2.模块化的优势
a. 模块化便于使用和维护
b. 模块可重复使用
3.导入模块
3.1 导入模块的语法:
import 模块名
import 模块名 as 别名
import wrvy #导入wrvy这个模块
imprt wrvy as wy #导入wrvy模块并将模块指定为wy这个别名
这种导入方式下调用模块中的内容:
语法:模块名.xxxx 备注:如果调用的是类或者函数记得后面加上小括号
3.2 导入模块中部分内容
语法: from 模块名 import 变量名
from 模块名 import *
from wrvy import a #从模块wrvy中导入a
from wrvy import a,b,c #从模块wrvy中分别导入a,b,c
from wrvy import * #从模块wrvy中导入所有的内容
3.3 导入模块中的内容并将导入的内容指定一个别名
注意:该方法的好处是防止导入模块中的内容(变量、函数、类等)与主模块中的内容(变量、函数、类等)同名而造成覆盖
from wrvy import tet_name as new_name
#从模块wrvy中导入tet_name内容并指定名为new_name这个别名
3.4 name__的使用说明
a. 当直接运行本文件时__name__表示该文件为主模块,此时如果打印print(name)控制台会显示__main
b.当从其他主文件导入该文件时,则__name__表示该文件的文件名,此时print(name)在该模块被其他主模块导入后运行会显示该模块的名称
3.5 if name == 'main’的应用场景
当希望有些代码只在本主文件运行时才执行,而该文件作为被导入模块被其他主文导入时程序不会执行这些代码,这时就可将这些代码放在if name == 'main’的条件下面来达到效果
if __name__ == 'main':
fk()
print(a)
print(c)
d = person()
以上表示在该条件下的代码只在该主文件运行时会执行,当被其他模块导入时,该条件下这些代码均不会执行
二.推导式
1.列表推导式:在列表中以推导式的方式生成一个新列表
语法:a = [表达式 for 变量 in 可迭代的对象 if 条件判断 ]
或 b = [表达式 for 变量 in 可迭代的对象 ]
lst = {1,2,3,4,5,6}
lsd = [i+3 for i in lst if i%2==0]
print(lsd)
print(type(lsd))
输出结果:
[5, 7, 9]
<class 'list'>
2.字典推导式:在字典中以推导式的方式生成一个新字典
语法:a = {y:x for x,y in 字典.items() if 条件判断 }
或 b = {y:x for x,y in 字典.items() }
d = dict([('a','2'),('x','3'),('k','6')])
dit = {y:x for x,y in d.items() }
print(dit)
print(type(dit))
输出结果:
{'2': 'a', '3': 'x', '6': 'k'}
<class 'dict'>
3.2.集合推导式:在集合中以推导式的方式生成一个新的集合
语法: a = {表达式 for 变量 in 可迭代对象 if 条件判断}
或 b = {表达式 for 变量 in 可迭代对象 }
lst = [1,2,3,4,5,6,7,10,24,13]
d = {i**2 for i in lst if i<13 }
print(d)
print(type(d))
输出结果:
{1, 4, 36, 100, 9, 16, 49, 25}
<class 'set'>
三.生成器
1.生成器的作用:当数据占据的内存比较大,而实际开发中只需要用到这么多数据中的少量数据而已,这时可以用生成器来实现用多少数据生成多少数据而不需要将没用到的数据也生成出来浪费了内存空间而影响性能。
2.生成器的优势:优化性能,节省内存消耗
3.生成器的创建方法:
· 以推导式的方式创建生成器
·语法: a = (表达式 for 变量 in 可迭代的对象 if 条件判断)
或 b = (表达式 for 变量 in 可迭代的对象 )
d = (i * 3 for i in lst if i%2 == 0)
print(type(d))
输出结果
<class 'generator'>
· 给函数添加关键字yield来创建生成器,该函数称为生成器函数,调用函数并用一个变量接收,该变量就是生成器
lst = [1,2,3,4,5,6,7,10,24,13]
def fkn(x):
for i in x:
if i % 2 == 0:
yield i
d = fkn(lst)
print(d)
print(type(d))
输出结果
<generator object fkn at 0x0000000001E7C780>
<class 'generator'>
4.将元素从生成器中取出的方法:
· 用函数next()从生成器中取出元素:next(生成器对象)
lst = [1,2,3,4,5,6,7,10,24,13]
def fkn(x):
for i in x:
if i % 2 == 0:
yield i
d = fkn(lst)
print(next(d))
· 调用特殊方法__next__()来取出元素: 生成器对象.next()
lst = [1,2,3,4,5,6,7,10,24,13]
def fkn(x):
for i in x:
if i % 2 == 0:
yield i
d = fkn(lst)
print(d.__next__())
5.判断一个对象是否是生成器的方法:
语法:
from collections import Generator
r = isinstance(对象,Generator) #判断对象是否为生成器
print(r)
四.迭代器
1.什么是迭代器:能够被next()函数使用并不断返回下一个值的对象就是迭代器
2.什么是可迭代对象:能够用于遍历的对象就是可迭代对象
3.判断一个对象是否是迭代器以及是否可迭代的方法:
语法:
from collections import Iterable,Iterator
print(isinstance(对象,Iterator)) #判断是否是迭代器
print(isinstance(对象,Iterable)) #判断是否是可迭代对象
4.迭代器与可迭代对象之间的关系
· 可迭代对象不一定是迭代器(例如列表,字典,元组,集合等是可迭代对象,但不是迭代器)
· 迭代器一定是可迭代对象
5.创建迭代器的方法:使用函数 iter() 将非迭代器对象变成迭代器对象
语法:
iter(对象) #将非迭代器对象变成迭代器对象
6.从迭代器中取出元素的两种方式
· 使用函数 next() 取出元素
语法: next(迭代器对象)
· 调用方法__next__() 来取出元素
语法: 迭代器对象.__next__()
五. 迭代器与生成器之间的关系
1.生成器是一种特殊的迭代器的,也是可迭代对象
2. 迭代器中包含一部分生成器,但并不是所有迭代器都是生成器
3.迭代器也是可迭代对象