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

 


__EOF__

本文作者Ambitious
本文链接https://www.cnblogs.com/ambitiousPlus/p/16091599.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Ambitious~  阅读(244)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示