第50~52讲:模块——模块就是程序
一 模块的基本概念
有关模块的具体内容可参见:https://www.cnblogs.com/luoxun/p/13383993.html
1 什么是模块
- 容器—>对数据的封装
- 函数—>对语句的封装
- 类—>对方法和属性的封装
- 模块—>模块就是程序
- 任何.py文件都可看作一个独立的模块
2 命名空间:从名称到对象的映射
3 导入模块
- import 模块名
- from 模块名 import 函数名
- from 模块名 import * (强烈要求大家不要使用这种方法,除非情况及其特殊)
- import 模块名 as 新名字
- 举例:
-
1 def c2f(cel): 2 fah = cel * 1.8 + 32 3 return fah 4 5 def f2c(fah): 6 cel =(fah - 32) / 1.8 7 return cel
-
1 from class50_TemperatureConversion import c2f,f2c 2 3 print("32摄氏度 = %.2f华氏度" % c2f(32)) 4 print("99华氏度 = %.2f摄氏度" % f2c(99))
-
二 模块的其它相关知识
1 if __name__ = '__main__'
- 在主程序中调用”__name__“变量,得到的是“__main__”函数;
- 在模块中调用”__name__“变量,返回的是被导入模块的名字;
- 举例:
1 def c2f(cel): 2 fah = cel * 1.8 + 32 3 return fah 4 5 def f2c(fah): 6 cel =(fah - 32) / 1.8 7 return cel 8 9 def test(): 10 print("测试,0摄氏度 = %.2f华氏度" % c2f(0)); 11 print("测试,0华氏度 = %.2f摄氏度" % f2c(0)); 12 13 if __name__ == "__main__": 14 test()
1 from class50_TemperatureConversion import c2f,f2c 2 3 print("32摄氏度 = %.2f华氏度" % c2f(32)) 4 print("99华氏度 = %.2f摄氏度" % f2c(99))
- 具体内容可参考:https://blog.csdn.net/yjk13703623757/article/details/77918633/
2 搜索路径
- 写好的模块放在哪?
- 解决方法一:放在和导入该模块的源文件所在位置相同的文件夹里
- 解决方法二:把模块所在路径添加到python程序的搜索路径中
- python模块的导入需要一个路径搜索的过程,该搜索路径就是一个列表/一组目录,可以通过sys模块中的path()方法查看系统本身的搜索路径;
- 自定义模块的最佳存放目录是:site-packages文件夹;
- 我们可以通过sys.path.append()方法把模块所在位置目录添加到python程序的搜索路径中。
3 包(package)
- 创建包的过程:
- (1)创建一个文件夹,用于存放相关的模块,文件夹的名字即包的名字;
- (2)在文件夹中创建一个__init__.py的模块文件,内容可以为空;
- (3)将相关的模块放入文件夹中
- 如何导入包中的模块:import 包名.模块名
三 像极客一样思考
1 python的设计哲学:优雅、明确、简单
python开发者的哲学:用一种方法,最好是一种方法来做一件事儿
实际工作中:尽量使用现成的模块
python电池:python标准库及其里面的模块(python标准库中包含一般任务所需要的模块)
2 学会查看python文档(需要学会英文)
打开IDLE——help——Python Docs F1即可
3 快速熟悉一个模块的方法
- 在IDLE中导入模块;
- 利用__doc__属性查看该模块的介绍文档:print(模块名.__doc__);
- 用dir()内置方法查看模块里面定义的类、函数、方法:dir(模块名)
- 通过__all__属性查看该模块可供外界调用的所有信息:模块名.__all__
- 不是所有的模块都有__all__属性
- 如果一个模块设置了__all__属性,用“from 模块名 import * ”号导入到命名空间,只有all属性列表中的信息才会被导入
- 通过__file__属性查看该模块源代码所在位置:模块名.__file__
- 通过help()内置函数查询想要了解的内容
4 timeit模块小甲鱼翻译的文档链接:https://fishc.com.cn/forum.php?mod=viewthread&tid=55593&highlight=timeit