Python学习(七)

模块

模块就是程序,模块是高级的封装
(1)容器:数据的封装
(2)函数:语句的封装
(3)类:方法和属性的封装
模块可以实现代码的重用

命名空间

  • 新建模块
    在这里插入图片描述
  • 导入模块
import hello
# 将新建的模块放入运行文件的根目录下
  • 调用模块内函数
    在这里插入图片描述
    导入模块内函数时,需要带模块名。

导入模块

(1) import 模块名

# 模块名存为 TemperatureConversion.py
def c2f(cel):
    fah = cel * 1.8 + 32
    return fah
    
def f2c(fah):
    cel = (fah - 32) / 1.8
    return cel
# import 导入模块
import TemperatureConversion

print("32摄氏度 = %.2f华氏度" % TemperatureConversion.c2f(32))
print("99华氏度 = %.2f摄氏度" % TemperatureConversion.f2c(99))

在这里插入图片描述
(2) from 模块名 import 函数名

# from 模块名 import 函数名
from TemperatureConversion import c2f, f2c

print("32摄氏度 = %.2f华氏度" % c2f(32))
print("99华氏度 = %.2f摄氏度" % f2c(99))

运行结果相同

还可以使用通配符“*”来导入模块中所有命名空间

from TemperatureConversion import *

print("32摄氏度 = %.2f华氏度" % c2f(32))
print("99华氏度 = %.2f摄氏度" % f2c(99))

【注意:此方法会使命名空间的优势消失,导致名字混乱】
(3)import 模块名 as 新名字

# import 模块名 as 新名字
import TemperatureConversion  as tc

print("32摄氏度 = %.2f华氏度" % tc.c2f(32))
print("99华氏度 = %.2f摄氏度" % tc.f2c(99))

if __name__ == ‘__main__’

  • 在模块中添加测试代码
# 修改之前的 TemperatureConversion.py 文件
def c2f(cel):
    fah = cel * 1.8 + 32
    return fah
    
def f2c(fah):
    cel = (fah - 32) / 1.8
    return cel

def test():
# =============================================================================
#     每个模块中都应该有一个测试函数来保证模块的正确性
#     防止在模块组装后再出现问题
# =============================================================================
    print("测试, 0摄氏度 = %.2f华氏度" % c2f(0))
    print("测试, 0华氏度 = %.2f摄氏度" % f2c(0))
    
test()
# 这时模块就是程序

这时再导入模块运行
就会发现既输出了测试结果又输出了运行调用程序的结果
在这里插入图片描述
那么如何避免这种结果,关键在于让Python知道该模块作为程序运行还是导入到其他程序中,这里就用到了“__name__”变量
在运行模块调用程序(calc.py)后,即导入了TemperatureConversion模块,并重新命名为tc,观察“__name__”变量
在这里插入图片描述
即当文件作为模块被调用后,它的“__name__”就变成了模块的名字
所以对之前的模块代码再次进行修改

def c2f(cel):
    fah = cel * 1.8 + 32
    return fah
    
def f2c(fah):
    cel = (fah - 32) / 1.8
    return cel

def test():
# =============================================================================
#     每个模块中都应该有一个测试函数来保证模块的正确性
#     防止在模块组装后再出现问题
# =============================================================================
    print("测试, 0摄氏度 = %.2f华氏度" % c2f(0))
    print("测试, 0华氏度 = %.2f摄氏度" % f2c(0))

if __name__ == '__main__':  
    test()

这时再运行调用模块的程序,就不会打印测试结果了。

搜索路径

sys.path 即是python搜索模块的路径,不同电脑的路径不一定相同。
在这里插入图片描述
由于建立的模块并不在默认的搜索路径下,所以在import建立的模块时,会发生报错的现象,这时就要自己将存放模块的路径添加进去
在这里插入图片描述

将模块分类放置
(1)创建一个文件夹,用于存放相关的模块,文件夹的名字即包名;
(2)在文件夹中创建一个__init__.py的模块文件,内容可以为空(必须有这个文件,该文件用来告诉Python,将此文件夹看作一个包来管理);
(3)将相关的模块放入文件夹中
在这里插入图片描述
包名为“M1”
在这里插入图片描述
M1文件夹内的Python程序
在这里插入图片描述
修改导入模块的程序,如果没有包名“M1”则会因找不到相关模块而报错。

Python技巧

Python标准库中包含一般任务所需要的模块,所以尽可能的使用现成的模块。
(1)从Python的文档中查找标准库
(2)从社区安装第三方模块
https://pypi.python.org/pypi
(3)PEP:Python Enhancement Proposals 即Python增强建议书,用来规范与定义Python的各种加强与延伸功能的技术规格,来让Python开发社区能有共同遵循的依据。
https://www.python.org/dev/peps/
(4)善用Python的文档
(5)当想要快速上手一个模块时,可以在Python中查看该模块的文档
在这里插入图片描述
查看模块中定义的变量
在这里插入图片描述
这里的“__all__”属性显示该模块可以供外界调用的所有信息
在这里插入图片描述
timeit中,Timer是一个类,后面是三个接口函数。
【注意】不是所有的模块都有“__all__”这个属性,若有该属性,其中便是可供外部调用的信息;
若一个模块包含“__all__”属性,那么使用“ from timeit import * ”来导入到命名空间时,只要“__all__”属性中的名可以被导入。
“__file__”属性用来指明该模块源代码所在位置,这样就可以根据源代码所在位置,找到源代码进行阅读。
(5)使用help内置函数
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值