社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

猪行天下之Python基础——2.1 Python注释与模块

coder-pig • 6 年前 • 533 次点击  
阅读 4

猪行天下之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(模块名)
复制代码

如果本文对你有所帮助,欢迎
留言,点赞,转发
素质三连,谢谢😘~


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31062
 
533 次点击