WELCOME

不积跬步,无以至千里;不积小流,无以成江海。

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')
别的模块在引入这个包的时候,会自动调用这段代码。

 

posted @ 2022-04-02 14:16  Ambitious~  阅读(255)  评论(0)    收藏  举报