Python 开发常用工具、代码规范、标准库模块导入

举报
共饮一杯无 发表于 2022/09/23 09:33:10 2022/09/23
【摘要】 Python 开发常用工具IDEL(https://docs.python.org/3/library/idle.html),,) Python 内置的IDE,功能比较一般。,VIM(http://www.vim.org/),,)如果你是个VIM爱好者,可以用VIM编写Python,但是Python的缩进处理会比较麻烦。当然,你在 Linux 服务器上的时候有时候就只能用VI/VIM了。V...

Python 开发常用工具

IDEL(https://docs.python.org/3/library/idle.html),,) Python 内置的IDE,功能比较一般。,
VIM(http://www.vim.org/),,)如果你是个VIM爱好者,可以用VIM编写Python,但是Python的缩进处理会比较麻烦。当然,你在 Linux 服务器上的时候有时候就只能用VI/VIM了。
Visual Studio Code(https://code.visualstudio.com/)),VSCode 对Python的支持非常友好,配合几个插件后几乎是对 Python 开发最友好的IDE了。
PyCharm(https://www.jetbrains.com/pycharm/)),jetbrains 出品的 PyCharm 也是 Python 开发者常用的IDE。

代码规范

CodeChina上有一个中文镜像仓库:zh-google-styleguide,可以看到 Google Python 代码风格指引十分简短:python_style_rules
此外,Python 官方代码风格文档是:PEP8。你会问PEP是什么?PEP是Python Enhancement Proposals的缩写。一个PEP是一份为Python社区提供各种增强功能的技术规格,也是提交新特性,以便让社区指出问题,精确化技术文档的提案。

Python标准库模块导入

Python 语言通过模块(module)来组织代码。Python 标准库十分庞大,由C语言编写的内置模块,和由 Python 编写的解决常见开发需求的模块。下面的Python数组列举了常用标准库。

python_modules = [
  "os --- 多种操作系统接口",
  "os.path --- 常用路径操作",
  "re --- 正则表达式操作",
  "datetime --- 基本日期和时间类型",
  "heapq --- 堆队列算法",
  "enum --- 对枚举的支持",
  "math --- 数学函数",
  "random --- 生成伪随机数",
  "itertools --- 为高效循环而创建迭代器的函数",
  "functools --- 高阶函数和可调用对象上的操作",
  "shutil --- 高阶文件操作",
  "sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块",
  "csv --- CSV 文件读写",
  "hashlib --- 安全哈希与消息摘要",
  "hmac --- 基于密钥的消息验证",
  "time --- 时间的访问和转换",
  "argparse --- 命令行选项、参数和子命令解析器",
  "logging --- Python 的日志记录工具",
  "threading --- 基于线程的并行",
  "multiprocessing --- 基于进程的并行",
  "socket --- 底层网络接口",
  "email --- 电子邮件与 MIME 处理包",
  "json --- JSON 编码和解码器",
  "urllib --- URL 处理模块",
  "http --- HTTP 模块"
]

使用 import 相关的语句可以引入 Python 标准库模块。特别地,import 可以被动态的从任何地方调用。

使用Python 包(package)组织代码

稍微正式一点的项目,都会通过将代码组织成有层次结构的组织,以便于管理和持续维护。Python 通过包(package)的方式来组织代码,包是一种特殊的模块(module)。
Python 的包有两种形式,分别是Regular packages 和 namespace packages。
所谓 Regular packages 就是指含有__init__.py的目录,这样的包被其他模块导入的时候,会先执行目录下__init__.py里的代码。Regular packages 可以嵌套,也就是目录下的子目录也可以是一个包。例如:

python_package_dir_example = '''
parent/
    __init__.py
    one/
        __init__.py
        one/
            __init__.py
    two/
        __init__.py
    three/
        __init__.py
'''

而 namespace packages 也是有层次结构的模块组织,不过它未必是存在文件夹里的,可以存在Zip压缩包里,也可以存在网络上,而且子包和父包也未必要存储在同一个地方。这里忽略不展开。
如果一个模块被import过,Python 会将导入的模块缓存在sys.modules字典里缓存起来,再次导入的时候不会重新执行导入动作,直接从缓存里取。反之,如果我们从sys.modules里把导入的模块删除,则再次import会再次触发模块导入动作。
良好的包/模块组织在程序开发中有重要的作用。随着项目代码的逐渐增加,一开始的单文件程序会逐渐膨胀,所幸 Python 提供当包模式可以良好应对通常的代码分层组织。
但是,当目录层次增加后,在下层目录里的代码引用其他目录的模块时,总是要输入全部路径有时并不方便,此时可以考虑使用 Python 的包相对路径来导入模块。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。