目录

导入模块

方式:  

调用功能:  

示例代码

制作模块

步骤: 

示例代码

模块定位顺序     

示例代码

制作包步骤(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_module1

my_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模块