python之模块简介

Day08 - 模块

1.模块

1.1定义

模块就是一系列功能的集合体,分为三大类(内置模块、第三方模块、自定义模块)一个python文件就是一个模块,文件名叫m.py模块名叫m

模块分为四种形式:

  • 使用python编写的.py文件
  • 已被编译为共享库或DLL的C或C++扩展
  • 把一系列模块组织到一起的文件夹(注:文件夹下有–init–.py文件,该文件称为包)
  • 使用C编写并链接到python解释器的内置模块

为何要有模块?

​ 1.内置与第三方模块拿来就用,无需定义,这种拿来主义,可以极大地提高自己的开发效率

​ 2.自定义模块:可以将程序的各部分功能提取出来放到一模块中为大家共享使用

​ 好处是减少代码冗余,程序组织结构更加清晰

1.2使用

#文件名foo.py
x=1
print('foo>>>>>>>>>>>>')
def get():
    print(x)
def change():
    global x
    x=0
class Foo:
    def func(self):
       print('from the func')

首次导入的三件事

  • 执行foo.py
  • 产生foo.py的名称空间,将foo.py运行过程中产生的名字都丢到foo的名称空间中
  • 在当前文件中产生的名称空间有一个foo,该名字指向2中产生的名称空间

之后的导入,都是直接引用首次导入产生的名称空间,不会重复代码

如何引用:

foo.变量名/函数名()

强调1:指名道姓地问某一模块要名字对应的值,不会与当前名称空间中名字发生冲突

强调2:无论查看还是修改都是以原模块为基准,与调用位置无关

1.3 导入模块

#一般用
import model1
import model2
#一行导入
import model1,model2#用逗号分割
#规范:内置>第三方>自定义
#别名
import model1 as#自定义模块的命名应采用纯小写+下划线的风格(py3)
#也可以在函数内导入模块

1.4python文件两种用途

  • 当成文件运行
  • 当成模块运行

1.5 其他导入方式

#格式:from 模块名 import 函数 
from foo import x
#x为当前文件的函数,但其所指向的内存地址是foo模块中所对应函数的内存地址
#发生的三件事
#1.产生一个模块的名称空间
#2.产生foo.py的名称空间,将foo.py运行过程中产生的名字都丢到foo的名称空间中
#3.在当前名称空间拿到一个名字,该名字与模块名称空间中的某一个内存地址相对应
from foo import *#大多数不建议
__all__=[]#列表存入的是模块中的函数名
#起别名
from foo import get as g
#循环导入(一个不要放到全局,放到函数内)

2.模块的搜索

模块查找优先级: 1.内存(内置)>2.硬盘(按照sys.path中存放的文件的顺序依次查找)

sys.modules()查看以及加载到内存的模块

3.包

包含有–init–.py的文件

包的本质是模块的模块的一种形式,包使用来被当做模块导入(python3不会报错)

3.1使用包

​ 包的导入,相当于导入–init–.py文件

#在__init__.py中添加
#绝对导入:以包的文件夹作为起始来进行导入
from foo.m1 import f1
from foo.m2 import f2
from foo.m3 import f3
#环境变量是以执行文件为准的,所有被导入的模块或者后续的其他文件的sys.path都是参照执行文件的sys.path
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#相对导入
.代表当前文件夹
..代表代表上一层文件夹
#包内导入推荐相对导入
#相对导入不能跨出包;绝对导入没有限制,所以绝对导入是一种通用的导入方式

强调:

关于包相关的导入语句也分为importfrom ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如import 顶级包.子包.子模块,但都必须遵循这个原则。但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)#例如 from foo.a.b.c.d.e.f import f1,f2,f3
#foo/a/b/c/d/e都是包名
2、包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间

import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件

4.软件开发的规范

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值