1. 模块
- 1.1 简介
- 模块化指将一个完整的程序分解成一个个的小模块
- 通过将模块组合,搭建一个完整的程序
- 模块化的特性
- 方便开发、方便维护、模块可以复用
- 1.2 模块的创建
-
在Python 当中
一个py文件就是一个模块
-
在一个模块中引入外部模块
import 模块名
(模块名就是py文件) -
可以引用同一个模块多次,但是模块的实例只会创建一次
-
模块的使用:
- 模块名.变量 模块名.函数 模块名.类
-
引入模块的方法:
以下前两种引入方式,使用模块中的对象时,需要加模块名
-
import 模块名
-
import 模块名 as 模块别名
-
from 模块名 import 变量,变量,…
-
from 模块名 import 变量 as 别名
-
from 模块名 import 类
-
from 模块名 import *
-
示例
# --------------------------------------------------------- import mokuai print(mokuai.a) mokuai.test1() c = mokuai.Car() c.name() # --------------------------------------------------------- import mokuai as m print(m.a) # --------------------------------------------------------- # 用以下语句引入模块不用加模块名 # 引入模块中的一个或多个对象 from mokuai import Car c = Car() c.name() # --------------------------------------------------------- from mokuai import test1 as t t() # --------------------------------------------------------- from mokuai import * c = Car() c.name() test1() # ---------------------------------------------------------
-
运行结果:
-
-
比较 import 模块 和 from 模块 import * 的区别。
特别要注意使用 from 导入模块的重名问题
-
示例:
def test1(): print('这是主模块中的test1()') import mokuai test1()
-
运行结果:
def test1(): print('这是主模块中的test1()') from mokuai import * test1()
-
运行结果:
-
模块分两大类:一种是python自带的,另一种是第三方模块
-
在一个模块内部都有一个 __ name __。通过它我们可以获得模块的名字
-
若py文件直接运行时,那么__ name __ 默认等于字符串 '__ main __ '。__ name __ 属性值为 __ main __ 的模块是主模块。一个程序中只有一个主模块。
-
可以使用 __ name __ 对单个模块的代码进行测试
-
3. 推导式
-
常用的推导式:列表推导式、字典推导式、集合推导式
-
推导式适合于一些代码量少,逻辑较简单的场景
-
语法: [变量 for 变量 in 源列表] or [变量 for 变量 in 旧列表 if 条件判断式]
-
示例:
# 需求 取出列表中 小于50的数字组成一个新列表 # 需求 取出列表中 小于50的数字组成一个新列表 num = [1,2,3,4,5,3,56,5,7,11,34,243,67,90,112,110] def fn(n): new = [] for n in num: if n < 50: new.append(n) return new l = fn(num) print('普通函数:',l) r = [n for n in num if n < 50] print('列表推导式:',r)
-
运行结果:
3. 生成器
- 生成器概念:
- 当Python 在处理大规模的序列时,一次存储这个序列会占用较大的存储空间,计算也不方便,因此python中引入了新的机制–生成器(generator)。
- 在Python中一边循环一边计算的机制称为生成器
- 生成器的使用
- 获取生成器中元素的方法
- __ next __()
- next()
- 生成器的实现
-
通过列表推导式来得到生成器
num = [1,2,3,4,5,3,56,5,7,11,34,243,67,90,112,110] g = (n for n in num if n < 50) print(g) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) # 生成器越界访问会提示 StopIteratio
-
运行结果:
-
通过函数得到生成器
- 定义一个函数,函数中要使用
yield
关键字 - 调用函数,接受调用的结果,结果就是一个生成器
- 借助next() ,next 获得元素
- 函数中出现yield 关键字,该函数就是一个生成器函数
- 定义一个函数,函数中要使用
-
示例:
def f(): num = 1 while True: num *= 3 yield num g = f() print(g.__next__()) print(next(g)) print(next(g))
-
运行结果:
-
- 获取生成器中元素的方法
4. 迭代器
-
迭代器概念:
-
获得元素的一次过程就叫迭代
-
可迭代:一般就指可迭代对象,简单理解for 循环,可连续的不断的获取元素的数据
-
可迭代对象:
- 1.列表、集合、字典、字符串、元组等序列
- 2 .生成器
-
判断一个对象是否是可迭代的
示例:num = [1,2,3,4,5,3,56,5,7,11,34,243,67,90,112,110] g = (n for n in num if n < 50) print(type(g)) from collections import Iterable print(isinstance(num,Iterable)) # 列表是可迭代的 print(isinstance(g,Iterable)) # 生成器是可迭代的
- 运行结果:
- 运行结果:
-
迭代器 可以被next() 函数调用并不断返回下一个值的对象称为迭代器 Iterator
- 生成器是可迭代的,也是迭代器
- 列表是可迭代的,但不是迭代器
-
-
语法:(变量 for 变量 in range() 代码块)或 用Iter() 函数可以将可迭代对象变成一个迭代器
-
示例:
l = [2,3,45,5,6] print(next(l)) # 报错:TypeError: 'list' object is not an iterator
l = [2,3,45,5,6] l = iter(l) print(next(l)) print(next(l)) 运行结果: 2 3