自定义模块
定义:
什么是模块:
本质就是.py文件,封装语句的最小单位。
写一个模块
''' 对这个模块的注释 自定义模块 模块中出现的变量,for循环,if结构,函数的定义,称为模块成员 ''' # 可执行语句,变量的定义、函数的调用 a=1 print(a) for x in range(3): print(x) # 函数的定义 def f(): print('hello world')
什么是自定义文件:
一个模块不宜过大,通常在1000~2000行左右
模块的运行方式:
脚本方式:直接用解释器执行,或者在PyCharm中右键运行。
模块方式:被其他的模块导入,导入他的模块提供资源(函数定义、类定义、变量等)
__name__
属性的使用:
自定义模块的导入
a.py
''' 对这个模块的注释 自定义模块 模块中出现的变量,for循环,if结构,函数的定义,称为模块成员 ''' # 可执行语句,变量的定义、函数的调用 a=1 print(a) for x in range(3): print(x) # 函数的定义 def f(): print('hello world') f()
test_import.py
''' 测试自定义模块的导入 ''' # 自定义模块被其他导入时,其中的可执行语句会立即执行 import a
Python中提供了一种可以判断自定义模块是属于开发阶段还是使用阶段。
print(__name__) # 以脚本运行时,显示固定的字符串 # __main__ # 以模块的方式运行时,就是本模块的名字 if __name__ == '__main__': for x in range(3): print(x)
模块开发阶段,一般会自定义一个函数进行测试
def main(): for x in range(3): print(x) if __name__ == '__main__': main()
使用自定义模块的成员
import a import time print(a.a) a.f() print(time.time())
系统在导入模块时的路径问题
内存中:如果之前成功到如果某个模块,直接使用已经存在的模块
内置路径中:Python安装路径下的Lib目录下,第三方模块放在Lib目录下的site-packages目录中
sys.path:是一个路径的列表,需要导入自己写的模块时,通常会修改这个列表,使用c语言集成在了解释器中。
# 查看sys.path内容 import sys print(sys.path) # 添加路径到sys.path sys.path.append(r'E:\A\Programming\py\oldBoy833\day02') # 使用绝对路径 -------------------------------------------------------------- print(__file__) # 当前文件的绝对路径 # 使用os模块获取一个路径的父路径 import os print(os.path.dirname(__file__)+'/aa') sys.path.append(os.path.dirname(__file__)+'/aa') # 使用相对路径
PYTHONPATH:import时寻找模块的路径(基本不会用)
导入模块的多种方式:
import xxx和from xxx import * 的区别
怎么解决命名冲突的问题
改用import xxx这种方式导入
自己避免使用同名
使用别名解决冲突(常用)
使用别名(成员):as(alias)
# 使用别名来避免命名冲突-成员 from my_module import age as a print(a)
使用别名(模块):
# 给模块起别名 import my_module as m print(m.age) m.f1()
from xxx import * 控制成员被导入__all__
__all__
是一个列表,用于表示本模块可以被外界使用的成员名。元素是成员名(变量名)组成的字符串。__all__
属性仅对from xxx import * 的导入方式生效,其余的方式都不生效,相对导入:
from ..z import c # 容易向外界暴漏c模块
print(a.c.age)
from ..z.c import *
print(a.age)
常用模块Ⅰ