内容简述:
- 1、注释
- 2、模块
1、注释
注释是一段「解释性」文本,在程序运行时,会被程序跳过,不做处理,一般是对代码的解释或提示,以此提高代码的可读性。写注释既方便了别人阅读代码,也方便自己日后回顾,而不用苦思冥想当初写这段代码的目的。当然注释也不是写的越多越好,应该「尽量避免没用的注释或写过多的废话」。
Python中提供了两种注释方式:「单行注释」和「多行注释」,单行注释通过#
进行标识,多行注释则通过两个三引号
来标识,代码示例如下:
# 这是一个单行注释 ''' 这是一个多行注释 ''' 复制代码
2、模块
①模块的基本使用
就是一个Python文件,以.py
结尾,包含了Python定义和声明。举个简单的例子:你可以把常用的代码块抽取出来,放到一个py文件中,然后在用到的地方对自己的模块进行引用。使用代码示例如下:
# 导入整个模块 import sys # 导入模块中的需要用到的部分 from sys import argv # 多个的时候可以用逗号隔开 from urllib.error import URLError, HTTPError # 导入模块中所有不是以下划线开头的名字,不建议这样做,如果同名会覆盖 # 定义过的名字;如果你硬想用这种导入方式,可以添加__all__成员来进行约束 # 比如:__all__ = ['a','b'] from sys import * 复制代码
另外,在导入自己的模块的时候,你可能遇到这样的问题:
写在模块里的测试代码都执行了!!!
你可以通过内置属性__name__
来区分,当此模块作为程序运行时,值会等于__main__
,而作为一个模块导入到其他程序,值则等于文件名字(去掉.py)。所以可以通过判断:__name__
是否等于__main__
来决定测试代码是否执行。
简单的代码示例如下:
if __name__ == '__main__': test() 复制代码
接着说说几个问题:
② 重复导入一个模块多次会怎么样?
答:第一次导入后就将模块名加载到内存中,后续的import只是对已加载到内存中的
模块对象增加一次引用,不会重新执行模块里的语句。
③ 模块的搜索路径与顺序?
答:可以通过打印
sys.path
来查看模块的搜索路径,比如我的电脑:
[ '/Users/jay/Project/Python/Book/Chapter 6', '/Users/jay/Project/Python/Book', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', '/Users/jay/Library/Python/3.6/lib/python/site-packages', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages' ] 复制代码
从上面不难看出Python对于模块的搜索顺序
:
程序所在目录 ===> 标准安装目录 ===> 标准库安装目录 ===> Python环境变量所包含的目录。
所以,如果你自定义的模块与内置模块重名的话,会调用你的模块而非内置的模块,所以在命名模块的时候还是尽量别重名。如果硬是要同名且两个模块都用到,可以使用「完整路径引入」,并使用as
关键字为模块设置别名。另外,如果你的模块都不在这些搜索路径里的话,可以通过调用sys.path.append("路径")
临时把路径添加到搜索路径中。
④ __init__.py文件是做什么的?
答:标识文件所在的目录是一个python的模块包(package),一般是空文件,当然你也可以加点东西来控制包的导入行为,直接在
__init__.py
文件中批量导入所需模块,而不用一个个导入,如下所示(还可以将一些初始化的代码放入到该文件中。)
# xxx包里的__init__.py import a import b import c # 调用这个模块的py文件 import xxx print(xxx.a,xxx.b,xxx.c) # 还可以利用上面讲到的__all__变量来简化下: # xxx包里的__init__.py __all__ = ['a','b,'c'] # 调用这个模块的py文件 from xxx import * 复制代码
对了,还可以通过相对导入的方式导入模块,示例如下:
import .a import A # 点号表示使用当前路径的a模块 import ..b import B # 两个点号表示访问上层的父类 复制代码
⑤ 模块如何迁移到新的环境?
有时我们写的模块或者代码需要迁移到另一个设备上去运行,而你的脚本可能用到了一些依赖模块,如果pip命令一个个装显得有些繁琐,可以通过「pipreqs」模块来完成。
答:键入
pip install pipreqs
安装pipreqs模块,接着终端切换到项目路径,键入pipreqs 导出文件的存放路径
就可以导出一个requirements.txt
的依赖文件,文件内容就是依赖的模块,复制到新的设备上,键入:pip install -r requirements.txt
即可自动下载安装需要用到的模块。另外,如果是想把电脑里Python环境中所有的模块迁移到另一台电脑,可使用命令导出依赖文件:pip freeze > requirement.txt
,安装方法同pipreqs。
⑥ 模块的重载
上面说了重复导入模块,只是新增一个引用,而不会重新导入。有时可能需要在同一个会话中去更新模块,可以通过「imp标准库中的reload()函数」来完成。
from imp import reload load(模块名) 复制代码
如果本文对你有所帮助,欢迎
留言,点赞,转发 素质三连,谢谢?~