我是靠谱客的博主 典雅故事,最近开发中收集的这篇文章主要介绍Python从0到1之模块和包模块,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

模块

Python模块是一个Python文件,以.py结尾,包含了Python对象定义和Python语句
模块能定义函数,类和变量,模块里也能包含可执行的代码

导入模块的方式

# import 模块名
import math
math.sqrt(9) # 3.0
# from 模块名 import 功能名
from math import sqrt
sqrt(9) # 3.0
# from 模块名 import * (*表示全部)
from math import *
sqrt(9) # 3.0
# import 模块名 as 别名
import math as sx
sx.sqrt(9) # 3.0
# from 模块名 import 功能名 as 别名
from math import sqrt as sq
sq(9) # 3.0

自定义模块

Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字,也就是自定义模块名必须要符合标识符命名规则

制作模块

新建一个Python文件 命名为my_module1.py 并定义testA 函数

def testA(a,b):
return a + b

测试代码

实际开发中,开发编写一个模块后,开发会在文件中添加测试信息如

print(testA(1,2))

此时无论当前文件还是其他已经导入的文件,运行时都会自动执行testA函数的调用
解决办法:只有在当前文件中调用该函数,其他导入的文件不符合该条件,不执行该函数的调用,添加代码

if __name__ =="__main__":
print(testA(1,2)) # 3

调用模块

import my_module1
print(my_module1.testA(2,3)) # 5

注意事项

如果使用 from … import … 或 from … import * 导入多个模块的时候,且模块内 有同名功能。当调用这个同名功能的时候,调⽤到的是后面导入的模块的功能。

# my_module1.py
def my_test(a,b):
return a + b
# my_module2.py
def my_test(a,b):
return a - b
from my_module1 import my_test
from my_module2 import my_test
print(mytest(5,2)) # 3

模块定位顺序

当导入一个模块,Python解释器对模块位置的搜索顺序是
1.当前目录
2.如果不在当前目录,Python则搜索shell变量pythonpath下的目录
3.如果都没有,Python会查看默认目录,一般为usr/local/lib/python
模块搜索路径存储在system模块的sys.path中,变量里包含当前目录,pythonpath和由安装过程决定的目录
注意:
自己的文件名不要和已有模块名一致,否则导致模块无法使用
导入功能名字一致时,调用的是最后定义或者导入的功能

all

如果一个文件中有__all__变量,当使用from xxx import * 导入时,只能导入这个列表中的元素

# my_module1.py
__all__ = ["testA"]
def testA():
print("testA")
def testB():
print("testB")
from my_module1 import *
testA() # testA
testB() # name 'testB' is not defined

将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包。

制作包

  1. 新建包mypackage
  2. 新建包内模块: my_module1 和 my_module2
  3. 模块内代码如下
# my_module1.py
print(1)
def info_print1():
print("my_module1")
# my_module2.py
print(2)
def info_print2():
print("my_module2")

导入包

import 包名.模块名

import 包名.模块名
包名.模块名.方法


import mypackage.my_module1
mypackage.my_module1.info_print1()
import mypackage.my_module2
mypackage.my_module2.info_print2()

from 包名 import *

注意:必须在 init.py 文件中添加 all = [] ,控制允许导入的模块列表。
from 包名 import *
模块名.方法

# __init__.py
__all__ = ["my_module1","my_module1"]
from my_package import *
my_module1.info_print1()
my_module2.info_print2()

最后

以上就是典雅故事为你收集整理的Python从0到1之模块和包模块的全部内容,希望文章能够帮你解决Python从0到1之模块和包模块所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部