原标题:小白学Python——自定义模块的使用
自定义模块导入:
要求:
模块文件后缀必须以.py结尾
模块文件名必须是合法的标识符
避免名称和内建模块名冲突
导入方式:
import语句
from import 语句
from import * 语句
正确的模块名:
mymod.py avde.py abc123.py
错误的模块名:
123.py abc.cpp math.py
示例见:
mymod.py #自定义模块函数
test_mymod.py #主模块(用来导入和调用mymod里的函数)
编辑
运行 test_mymod.py 将调用 mymod.py 中的全局变量 “myfac”、“mysum”、“name2”
结果如下:
import 语句 搜索模块的路径顺序
搜索内建模块
索引程序的运行时路径(当前工作目录)
sys.py(模块的搜索路径)提供的路径
sys.path是一个列表,里面放的都是模块的搜索路径
模块化编程的优点:
有利于多人合作开发
使代码更加利于维护
提高代码的复用率
模块化编程有助于解决函数名和变量名冲突(重名)问题,模块内的变量作用域为模块内全局(不同的变量内可以有相同的全局变量)
模块的加载过程:
在模块导入时,模块内的所有语句都会执行
如果一个模块已经导入,则再次导入是不会重新执行模块内的语句
模块的重新加载:
模块被导入的执行过程:
先搜索相关的路径,找到.py文件
判断是否由此文件对应的.pyc文件,如果没有.pyc文件,则用.py文件生成.pyc文件
如果存在.pyc文件,需要判断.py文件是否比.pyc文件新,如果新则重新生成.pyc,然后再加载.pyc文件
pyc文件(相当于加载的缓存程序),模块的编译文件
编译 解释执行
例如 mymod.py----------->mymod.pyc ------------> python3
模块的属性:
模块的文档字符串:
__doc__属性
作用:用来绑定文档字符串
示例见:mymod__doc__.py
编辑
运行结果如下:
__file__属性:
作用:用来绑定模块对应的文件路径名
注意:内建函数没有__file__属性(如:math)
示例见:mymod__file__.py
运行结果如下:
__name__属性
作用:
用来记录模块自身的名字
用来判断是否为主模块
注意:主模块是指程序汇总的第一执行起来的模块
说明:
当此模块作为主模块运行时,__name__属性 绑定 '__main__’
当此模块不作为主模块运行时,此__name__属性绑定模块名
如:mymod.py 的模块名为 ‘mymod’
模块的 __all__列表:
模块中的 __all__列表是一个用来存放可导出属性的字符串列表
作用:
限定在用from xxx import * 导入时,只导入 __all__列表内的属性
注意:此__all__列表,只对 from import * 语句有效
示例见:
第一步:建立一个模块 mymod3.py
# mymod3.py
#首先 建立一段函数
第二步:建立导入模块 示例见 import_mymod3.py
第三步:运行import_mymod3.py
模块中 mymod3.py 变量 f1 f2 f3 name1 name2,被导入
第四步:如果 只想导入" f1 , name1 " , 其他" f2 , f3 , name2 "不被导入
接下来使用 __all__函数,示例如下
接下来运行: import_mymod3.py
将会只导入 f1 , name1
模块的隐藏属性
模块汇总以 下划线(_) 开头的属性, 在from import * 语句导入时
将不被导入,通常称为这些属性为隐藏属性
示例见:mymod4.py
建立导入模块 示例见 import_mymod3.py
运行 import_mymod4.py
标准库模块
随机模块 random
作用:
用于模拟或生成随机数的模块(摇塞子)
import random as R
R.random() #返回一个[0,1)之间的随机实数
R.uniform(a,b) #返回[a,b]之间的随机实数
R.randint(a,b) #返回[a.b]范围内的整数(包含a,b)
R.randrange([start,] stop[,step]) #返回range(start,stop,step)中的随机数字
R.choice(seq) #从序列中返回随意元素
R.shuffle(seq[,random]) #随机指定序列的顺序(乱序序列)
R.sample(seq,n) #从序列汇总选择n个随机且不重复的元素
练习:
1.猜数字游戏
随机生成一个0~100的整数,用变量x绑定
让用户输入一个数字y,输出数字的结果
如果y大于x,则提示“您猜大了”,继续让用户猜下去
如果y小于x,则提示“您猜小了”,继续猜
如果y等于x,,则提示“恭喜您猜对了”,打印出猜数字的次数,然后退出程序
注意:知道猜对才能退出
运行结果:
更多学习笔记请关注我的公众号!