–源于黑马程序员 python600集从入门到精通
模块
1)每一个以扩展名.py结尾的python源代码文件都是一个模块;
2)模块名同样也是一个标识符,需要符合标识符的命名规则;
3)在模块中定义的全局变量,函数,类都是提供给外界直接使用的工具;
4)模块好比是工具包,要想使用工具包中的工具,需要先导入 这个模块
import 模块名
模块的别名
如果模块的名字太长,可以使用as指定模块的名称,以方便在代码中的使用
import 模块名 as 模块别名
hm_04_循环_99乘法表.py文件实现了一个99乘法表的函数
#循环嵌套实现九九乘法表
def muliti99():
row = 1
while row <= 9:
col = 1
while col <= row :
print("%d * %d = %d " % (row,col , (col *row)),end = "\t")
#如果"%d * %d = %d "中加,是形成了一个table
col += 1
print("")
row += 1
在一个新的文件中导入该模块并调用其中的函数
#调用函数文件
import hm_04_循环_99乘法表 as multi
multi.muliti99()
#hm_04_循环_99乘法表.muliti99()
运行结果为99乘法表
from …import 导入
如果希望从某一模块中,导入部分工具,就可以使用from …import 的方式;
inport 模块名是一次性把模块中所有工具全部导入,并且通过模块名/别名 访问;
导入之后,不需要通过模块名.访问,直接可以使用穆凯提供的工具:全局变量,函数,类
注意:
如果两个模块,存在同名的函数,那么后导入模块的函数,会覆盖掉先导入的函数
开发时import代码应该同意写在代码的顶部,更容易及时发现冲突
一旦发现冲突,可以使用as关键字给其中一个工具起别名
from hm_04_循环_99乘法表 import muliti99
muliti99()
会输出结果99乘法表
form …import *
从模块中导入所有工具–不推荐使用,函数崇明没有任何提示,出现问题不好排查
模块的搜索顺序
python解释器 在导入模块时,会:
1)搜索当前目录指定模块名的文件,如果有就直接导入;
2)如果没有,再搜索系统目录:
在开发时,给文件起名,不要和系统的模块文件 崇明
python中每一个模块都有一个内置属性__file__可以查看模块的完整路径;
开发原则:
每一个文件都应该时可以被导入的;
一个独立的python文件就是一个模块;
在导入文件时,文件中的所有没有任何缩进的代码都会被执行一遍;
实际开发场景:
1)每一个模块都是独立开发的,大多有专人负责;
2)开发人员通常会在模块下方增加一些测试代码;–仅在模块内使用,而被导入到其他文件中不需要执行;
__name__属性
__name__属性可以左到,测试模块的代码只在测试情况下被运行,而在被导入时不会被执行;
每个模块都有一个__name__属性,当其值是’main’时,表明该模块自身在运行,否则是被引入
if __name__ == '__main__':
print("程序自身在运行")
else:
print("我来自另一个模块")
如何只在自己的程序中执行测试代码:
在程序中加判断:
if __name__ == '__main__':
测试代码
包
包是一个包含多个模块的特殊目录
目录下包含一个特殊的文件__init__.py
包的命名方式和变量名一致 小写字母+下划线
好处:使用import可以一习性导入包中所有的模块
建立包的方式:
1.file -->new–>directory;手动建立__init__.py
2.file—>new—>python package(自动创建__init__.py)
示例:
新建pythonpage后,在目录下新建两个文件夹
在receive_message文件中编写接收函数
def receive():
print("receive message")
在sendMessage文件中编写发送函数
def send():
print("sed message")
调用前需要在__init__文件中,导入目录下的文件
通过from.import 文件名的方式
from.import sendMessage
from.import receive_message
在别的模块中调用:
import pybao
pybao.sendMessage.send()
pybao.receive_message.receive()
输出:
sed message
receive message