python代码模块与模块之间空1行_猪行天下之Python基础——2.1 Python注释与模块

内容简述:

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(模块名)

如果本文对你有所帮助,欢迎

留言,点赞,转发 素质三连,谢谢:kissing_heart:~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值