目录
导入模块
方式:
调用功能:
示例代码
制作模块
步骤:
示例代码
模块定位顺序
示例代码
包
制作包步骤(Pycharm):
注意:
导入包方法:
注意:
示例代码
python模块(Module)是一个Python文件,以.py结尾,包含了Python对象定义和Python语句
作用
模块能定义函数,类和变量,模块里也能包含可执行的代码
导入模块
方式:
import 模块名
from 模块名 import 功能名
from 模块名 import 功能1,功能2,功能3.......
from 模块名 import *
import 模块名 as 别名
from 模块名 import 功能名 as 别名
import 模块名1,模块名2
调用功能:
模块名.功能名()
导入了具体功能名的话调用就直接功能名()调用
写法*号的代表导入了全部功能,也不需要写模块名,直接功能名()调用你
示例代码
# 尝试math模块下的是sqrt()功能-----开平方
import math
result = math.sqrt(9)
print(result)
from math import ceil,floor # 导入具体模块的功能名之后调用就不需要模块名前缀,直接 功能名()
result1 = floor(2.6) # 向下取整
result2 = ceil(2.6) # 向上取整
print(result1)
print(result2)
# 定义别名
from math import sqrt as sq
result = sq(8)
print(result)
制作模块
在Python中。每个Python文件都可以作为一个模块,模块的名字就是文件的名字,也就是说自定义模块名必须要符合标识符命名规则
步骤:
1.新建一个Python文件,命名为my_module1.py,并定义testA函数
2.测试模块,实际开发中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息
例如,在my_module1.py中添加测试代码
如:
def testA(a,b):
print(a+b)
testA(1,1)
此时,无论是当前文件还是其他已经导入了该模块的文件,在运行时候都会自动执行testA函数的调用
解决办法:
if __name__ == '__main__':
testA(1,1)
此时只在当前文件中调用该函数,其他导入了的文件并不符合该条件,则不执行testA函数调用
扩展:
__name__知识: 在当前文件下的__name__打印是__main__值,但在其他文件中调用打印出来的是文件名
即用此可以判断当前是否是自己本身文件,决定是否执行代码
示例代码
# 调用自己创建的模块
import my_module1
result = my_module1.testA(2,3)
print(f'调用自己创建模块的方法:{result}')
name = my_module1.name()
print(name) # my_module1my_module1
# 定义当前模块里的功能
def testA(a,b):
return a+b
# 功能测试信息 只在模块里执行
if __name__ == '__main__':
result = testA(1,1)
print(f'当前模块里执行的测试代码:{result}')
# 测试__name__
def name():
return __name__
print(name()) # __main__
模块定位顺序
当导入一个模块,python解析器对模块位置的搜索顺序是:
1.当前目录
2.如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录
3.如果都找不到,Python会查看默认路径,UNIX下,默认路径一般为/usr/local/lib/python/
模块搜索路径存储在system模块的sys.path变量中,变量里包含当前目录,PYTHONPATH路径和由安装过程决定的默认目录
注意:
1.自己的文件名不要和已有模块名重复,否则导致模块功能无法使用
2.使用 from 模块名 import 功能 的时候,如果功能名字重复,调用到的是最后定义或导入的功能当一个模块文件中有__all__变量,当使用from xxx import *
示例代码
from my_module2 import *
testA()
testB()
# testC() # 无法导入testC功能,因为不在 __all__ = [] 列表中my_module2
__all__ = ['testA','testB'] # 此时使用 from my_module2 import * 导入时只能导入列表中字符所携带的功能
def testA():
print('my_module2模块的testA功能')
def testB():
print('my_module2模块的testB功能')
def testC():
print('my_module2模块的testC功能')
if __name__ == '__main__':
testA()
testB()
testC()
包
包-------将有联系的模块组织在一起,即放在同一个文件夹下,并且在这个文件夹下创建一个名字为__init__.py的文件,那么这个文件夹就称之为包
制作包步骤(Pycharm):
new ---> Python Package ---> 输入包名 ---> OK ---> 新建功能模块(有联系的模块)
注意:
新建包后,包内部会自动创建__init__.py文件,这个文件控制着包的导入行为
导入包方法:
import 包名.模块名
包名.模块名.目标功能
注意:
1. 必须在__init__.py文件中添加__all__ = [] ,控制允许导入的模块列表
2. 此时通过 from 包名 import * 就只能导入__init__.py包里的__all__列表里面的模块了
示例代码
import mypackage.my_module1
mypackage.my_module1.testA()
from mypackage import *
# mypackage.my_module2.testA() # 无法导入my_module2模块
















