面向过程编程与模块
面向过程编程(理论)
面向对象编程就类似于造一条产品的流水线
面向过程编程的缺点是,一旦需要修改功能,那需要整体改造
模块简介
1.python起源
python最早起源于linux运维,胶水语言,俗称调包侠(由贬到褒)
2.模块的定义
模块是一系列功能集合体
3.模块的作用
提高开发的效率,可以站在巨人的肩膀上
4.模块的三种来源
内置(python解释器自带的,调用后直接使用)
第三方(其他人写的放在放在网上,下载后可以使用)
自定义(自己写的)
5.模块的四大表现形式
用python编写的代码(.py文件)
已被编译为共享库或DLL的c或c++的扩展
包好一组模块的包(文件夹)
c编写的链接到pthon解释器的内置模块
6.学了模块后的技巧
以后在开发大型项目时,遇到比较复杂的功能时,看是否有相应的模块
两种句式
# 学习模块的注意点,在学习模块时,一定要搞清楚谁是导入文件,谁是模块
第一种句式结构:import 模块名 (导入py文件的时候,一定不要加文件后缀)
1.多次导入相同的模块,只会执行一次
2.导入模块之后,发生了什么?
运行导入文件,产生导入文件的全局名称空间
运行模块文件
产生模块文件的全局名称空间,运行模块文件内部代码,将产生的名字全部存档于模块文件的名称空间
导入文件中会生成一个同模块名相同的名字,指向模块的名称空间
3.如何在导入文件里使用模块文件里的名字
用模块名加点的方式即可使用,并且肯定不会产生冲突(指名道姓)
第二种句式结构:from 模块名 import 名字1,名字2
1.多次导入也只会执行一次
2.导入模块之后发生的事情
运行导入的文件,并产生导入文件的名称空间
运行模块文件,并产生模块文件全局名称空间
运行模块文件内部的代码,并将产生的名字全部存档于模块名称空间
在执行文件中存在名字1,2指向模块名称空间中名字1,2指向的值
导入模块扩展用法
1.起别名
可以给模块起别名,也可以给模块中的某个名字起别名
给模块起别名:import 模块名 as 新模块名
给名字起别名:from 模块名 import 名字 as 新名字
2.连续导入
连续导入多个模块:
末尾导入:import 模块1,模块2,模块3
适用条件:只有当几个模块功能相似或者属于一个系列时
分行导入:
import 模块1
import 模块2i
import 模块3
import 模块4
适用条件:如果模块功能不同,或者不属于一个系列时
连续导入多个名字:
from 模块名 import 名字1,名字2,名字3
3.通用导入
将模块中所有的名字全部导入:
from 模块名 import *
如何限制他人使用全部的功能:
只需要在模块文件中加入__all__ = ['名字1','名字2','名字3']
# 只有在中括号里面的,用户调用*功能时才会被使用,但是如果指名道姓的调用也是可以的
判断文件类型
判断文件是执行文件还是调用文件的方法?
使用__name__方法。当文件是导入文件则返回的是__main__,当文件是模块文件是,返回的是模块名。
if __name__ == '__main__':
pass
在pycharm中,可以直接敲main,再按tab键,即可自动补全判断
循环导入
1.如果在导入模块时,出现循环导入的现象,那么说明程序设计的不合理
2.在编码生涯循环导入不允许出现
3.如何解决循环导入的问题
方法1:将所有的模块导入放在文件的最后 (调换顺序)
方法2:将模块导入放入函数体代码,当所有的名字加载完毕之后再调用函数
模块导入的顺序
1.查找顺序
先从内存中查找>>>再去内置模块中查找>>>再去sys.path系统路径中查找
(如果都没有则报错)
2.当前文件所在的路径怎么查?
import sys
print(sys.path)
# 结果中第一个元素永远是当前文件所在的路径
3.当某个自定义模块找不到的时候,怎么办?
方法一:手动添加模块路径到系统路径中
import sys
sys.path.append(r'路径') # D:\py1\day\aaa
方法二: from ……import……句式
from 文件夹名.文件夹名 import 模块名
from 文件夹名.文件夹名 import 名字