Python包的使用
1.包的使用
一个模块就是一个 py 文件,在 Python 里为了对模块分类管理,就需要划分不同的文件夹。
多个有联系的模块可以将其放到同一个文件夹下,为了称呼方便,一般把 Python 里的一个代码文件夹称为一个包
2.导入包的方式
可以使用以下几种方式来导入模块,使用模块里的方法。
1>. 直接imprit xxx,使用包名.模块模块名导入指定的模块。
2>. 使用from xxx import xxx 方式导入指定模块。
(1)from xxx import 000:将xxx里面的000调用过来
(2)from xxx import * :将xxx里面所有的函数加载到内存,即都调用过来
3>. 使用__all__.py文件,导入包里的指定模块。
可以在calculate.py文件里加入__all__,在该文件里导入指定的内容。
无论是import还是form的形式,都会将模块内容进行加载
如果不希望其进行调用,就会用到__name__
1 # 导入模块
2 import calculate
3
4 # 使用模块中的函数,模块名.变量 模块名.函数 模块名.类
5 list1 = [4, 2, 5, 8, 3]
6
7 result = calculate.dividv(*list1)
8 print(result)
9
10 # 使用模块中的变量
11 print(calculate.number)
12 print(calculate.name)
13
14 # 使用模块中的类
15 cal = calculate.Calculate(99)
16 cal.test()
17
18 calculate.Calculate.test1()
1 from calculate import add, number, Calculate
2
3 list1 = [4, 2, 5, 8, 3]
4 result = add(*list1)
5 print(result)
6
7 sum = result + number
8 print(sum)
9
10 cal = Calculate(99)
11 cal.test()
calculate.py文件中加入__all__=[函数/类](限制from calculate import * 调用所有)
此时在from calculate import *调用过来的就是只有__all__里面包含的类或者函数,而不是所有的函数或者类。
1 __all__ = ['add', 'Calculate', 'number'] 此时form calculate import *:包含 add,Calculate,number
3 number = 100
4 name = 'calculate'
5
6
7 def add(*args):
8 if len(args) > 1:
9 sum = 0
10 for i in args:
11 sum += i
12 return sum
13 else:
14 print('至少传入两个参数...')
15
16
17 def minus(*args):
18 if len(args) > 1:
19 m = 0
20 for i in args:
21 m += i
22 return m
23 else:
24 print('至少传入两个参数...')
25
26
27 def multiply(*args):
28 if len(args) > 1:
29 m = 1
30 for i in args:
31 m *= i
32 return m
33 else:
34 print('至少传入两个参数...')
35
36
37 def dividv(*args):
38 if len(args) > 1:
39 m = 0
40 args = list(args)
41 for i in range(len(args) - 1):
42 args[i] /= args[i + 1]
43 m = args[i]
44 return round(m, 3)
45 else:
46 print('至少传入两个参数...')
47
48
49 class Calculate:
50 def __init__(self, num):
51 self.num = num
52
53 def test(self):
54 print('正在使用Calculate进行计算...')
55
56 @classmethod
57 def test1(cls):
58 print('--------->Calculate')
无论是import还是form的形式,都会将模块内容进行加载
如果不希望其进行调用,就会用到__name__
在calculate.py文件加入以下代码
1 def test():
2 print('我是测试...')
3
4 if __name__ == '__main__':
5 test()
在自己的模块里面,__name__叫 __main__
如果在其他模块中通过导入的方式调用的话:__name__
现有以下包newmsg,包里由两个模块,分别是sendmsg.py、recvmsg.py文件。在包的上级文件夹里,有一个test.py文件,目标是在test.py文件里引入newmsg的两个模块。
目录结构如下图所示:
sendmsg.py文件里的内容如下:
def send_msg():
print('------sendmsg方法被调用了-------')
recvmsg.py文件里的内容如下:
def recv_msg():
print('-----recvmsg方法被调用了--------')
使用__init__.py文件,结合__all__属性,导入包里的所有模块。
在newmsg包里的__init__.py文件里编写代码:
__all__ = ["sendmsg","recvmsg"] # 指定导入的内容
test.py文件代码:
from newmsg import * # 将newmsg里的__inint__.py文件里,__all__属性对应的所有模块都导入
sendmsg.sendmsg()
recvmsg.recvmsg()
包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包
有效避免模块名称冲突问题,让应用组织结构更加清晰
__init__.py文件有什么用
__init__.py 控制着包的导入行为。__init__.py为空仅仅是把这个包导入,不会导入包中的模块。可以在__init__.py文件中编写内容。
newmsg/__init__.py文件:
print('hello world')
别的模块在引入这个包的时候,会自动调用这段代码。
作者:Ambitious
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!