python视频学习之模块和包

模块是Python的代码打包方式,提供代码重用。if__name__==\__main__用于区分模块直接运行与被导入。包是多级模块组织,通过文件夹和__init__.py管理。from...import*需谨慎,可能导致命名空间污染,可使用__all__限制导入内容。
摘要由CSDN通过智能技术生成

目录

模块

if __name__=="__main__"

 包

遏制from...import * 的附加伤害 

 

模块

是一种代码的打包手段。它是python中最高级别的组织结构,也是最高层次的代码重用手段

当一些代码在程序中重复出现时,就会导致冗杂局面出现,这时我们就会把它打包成函数的形式,这样只需要调用函数就可以实现代码的重复使用,我们学到的第一种代码打包手段就是函数;

后来我们学习了类和对象,发现可以从另外一个思路解决代码打包问题。类和对象来源于对现实世界的模拟,运用类和对象的打包思维,任何事物都可以被看做是属性和方法的有机结合,属性决定了对象的静态特征,方法实现了对象的动态能力。

但是类不是最高级别的打包方案。打包是为了重用,类是在一个程序里被重复实例化为多个对象而已,比类更厉害的打包方案是模块,它使得一个或多个源代码文件可以被其他程序重复使用

在python中导入模块通常有三种方案 

  • import+模块名(使用这种方案导入,在调用模块中的对象时要使用<模块名>.<对象名>的形式进行访问)
  • from+模块名+import+对象名(直接从模块导入所需对象)
  • import+模块名+as+关联名
if __name__=="__main__"

在阅读开源代码时经常看到  if __name__=="__main__" 这行语句,那么__name__是什么?"__main__"是什么?  见以下解析

 摄氏度和华氏度的相互转换的程序相当于一个模块(HS模块),如果我们试图在另一个源文件中导入该模块就会出现问题:在HStest.py源代码文件中,仅有两行打印语句,但执行起来却打印了四行

 我们在导入的HS模块中,自身就有两行用于测试的打印语句,这里一并被执行(模块在导入过程中,会从头到尾执行一遍导入模块中的所有语句)

解决方法:  if __name__=="__main__"

当一个模块被作为脚本独立执行时,它的__name__属性就会被赋值为"__main__",因此,只要在模块执行代码之前判断__name__是否等于"__main__"就可以解决问题

 那么如果HS.py作为模块导入到其他程序中,此时__name__是什么?值是HS(作为模块导入时,name值是模块名,而非"__main__")

 

 包

1.在实际开发中,一个大型项目常常会涉及到很多源代码文件,如果将它们都放到一起,可能产生混淆,如果此时能通过文件夹的形式将这些源代码文件进行整理分类,就比较条理清晰。

2.python发明了package,它允许我们通过点号(.)将源文件组织成多个分级的形式,也就是支持我们将模块分门别类,然后存储到不同的文件夹中。

3.以华氏度和摄氏度的转换程序为例:先创建一个文件夹aa,将HS.py移动到文件夹中,修改HStest.py(导入模块时使用点号(.)将包与模块分隔)

 4.如果多个包叠加,访问模块时会费劲,两种方法解决问题:

  • 使用import..as...语法,给模块取一个别名,访问时直接使用别名即可
  • 利用__init__.py这个包的构造文件,我们可以让包在导入时自动导入模块
遏制from...import * 的附加伤害 

from...import *:意思是导入模块中的所有内容。使用需谨慎,毕竟模块中包含了大量的其他程序,不需要用到的变量、函数和类直接全部导入,就会造成命名空间的污染,可以用__all__属性遏制它的伤害。在模块中使用__all__属性,就可以指定 from...import * 所能导入的内容

__all__属性可以作用于包:对于包来说,如果没有定义__all__,那么 from...import * 的语法不导入包里面的任何模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值