Python包管理与代码整洁之道

简介: 1. Python包管理工具pip使用:更改镜像源、配置相关、批量导出/安装包;2. Python常用编码规范:常见编码规范类型、PEP8规范以及如何使用pycharm内置的PEP8、pycharm中导入第三方PEP8工具autopep8;3. 编写PythonIC代码:Python之禅的19条指导原则、常用编码规范说明(编码&缩进&引号&空行等的使用,以及变量&函数&类&常量等的命名规范)

前言

在上一篇《Python环境搭建及PyCharm破解使用技巧》中,我们介绍了:

  1. Python介绍:简介、优缺点、使用场景
  2. Python安装与配置:Windows、Mac、Linux下安装与环境变量配置
  3. PyCharm破解及使用:PyCharm破解步骤、PyCharm常见使用配置技巧
  4. Python多版本多环境解决方案:pyenv与venv创建虚拟环境

本篇文章将重点介绍Python的包管理规范以及如何编写优雅的PythonIC代码。

统一的编程规范为什么重要?

统一的编程规范能提高开发效率。而开发效率,关乎三类对象: 阅读者、编程者和机器。

优先级是阅读者的体验 >> 编程者的体验 >> 机器的体验。  

一、Python包管理工具-pip

pip官网: https://pypi.org/project/pip/

1.pip常用命令

pip--version/-V查看pip版本pipinstallxxx安装xxx包,默认下载最新版本,pipinstallxxx==2.0.0下载安装指定版本pipdownloadxxx下载安装包,不安装pipuninstallxxx卸载包piplist查看当前系统所有已安装的包piplist-o查看已安装的包中可以升级的包列表pipsearchxxx搜索下载源中是否存在指定的包pipshowxxx查看包信息,如版本、依赖信息pipinstall--upgradepip升级pip

2.pip更改安装镜像源

pip常用的国内镜像源

pip指定临时下载源

pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simple(镜像地址) pyspider(模块名称)

pip永久指定下载源

方法一:通过本地文件方式

编辑本地pip.ini文件,填写如下内容:

方法二:通过命令行方式

pipconfigsetglobal.index-urlhttps://mirrors.aliyun.com/pypi/simple/

执行完上述命令,其实也是往pip.ini文件中插入了方式一种的配置内容。

3.pip配置相关

查看镜像源配置

pipconfiglist# 查看镜像源

查看详细配置

pipconfiglist-v# 查看详细配置

在命令行通过调用记事本方式快速打开pip配置文件

pipconfigedit--editornotepad

键入命令后会自动打开记事本

4.pip包管理

查看已安装包列表

piplistinstalled

快速导出当前python环境下所有已安装的依赖包列表到指定文件

pipfreeze>requirements.txttyperequirements.txt# 查看文件内容,类似于cat命令

指定文件,批量下载到当前目录

pipdownload-rrequirements.txt-d .

查看下载后的本地文件

二、Python常用编码规范

1.Python常用编码规范类型

PEP 8

PEP 8 可以算是 Python 官方的标准编码规范。它是用于规范 Python 主发行版中的标准库的代码。所以这个编码规范是值得一看。
文档地址:https://www.python.org/dev/peps/pep-0008/
如何参照 PEP 8 编写漂亮的 Python 代码:https://realpython.com/python-pep8/

Google 的 Python 风格指南

Google 的 Python 风格也是遵循 PEP8 规范。
文档地址:http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/contents/

Pocoo 风格指南

Pocoo 团队编码风格指南严格遵循了 PEP8 的要求,但略有一些不同之处,并进行了一定的扩展延伸。
文档地址:http://dormousehole.readthedocs.io/en/latest/styleguide.html

2.PEP 8 规范

使用pycharm内置的PEP 8

使用pycharm内置的PEP8检测器,能够自动对编码不规范的地方进行检查、指出错误,并推荐修改方式。具体位置见:Settings-Editor-Inspections-Python

使用第三方PEP8工具Autopep8

autopep8是一个命令行小工具,可以对某个文件进行代码格式化。

① 安装

pipinstallautopep8

② 代码格式化

autopep8--in-place--aggressive--aggressive<filename>

执行通过上述命令后,会自动对指定文件的编码风格进行格式化。

导入第三方工具autopep8到pycharm

① 导入autopep8到pycharm

Settings-Tools-External Tools,点击+号新创建一个tool,按照如下进行填写,其中:

  • Name:工具名称,任意,取名autopep8即可;
  • Group:所属组织,保持默认;
  • Description:工具描述,任意;
  • Program:autopep8的文件路径,在使用pip安装了autopep8后,文件路径为当前环境的Scripts/autopep8.exe,打开右边的文件夹选择autopep8.exe文件即可;
  • Arguments:参数,填写:--in-place --aggressive --aggressive $FilePath$
  • Working directory:工作目录,填写:$ProjectFileDir$

导入完成后:

② 格式化代码

pycharm中编码后,使用导入的autopep8工具对代码进行格式化

③ 格式化前后的内容对比

# 格式化前a=1b=3c='python'# 格式化后a=1b=3c='python'

三、代码整洁之道:编写PythonIC代码

1.python之禅:19条指导原则

  1. 优美胜于丑陋;
  2. 明了胜于晦涩;
  3. 简单胜于复杂;
  4. 复杂胜于晦涩;
  5. 扁平胜于嵌套;
  6. 间隔胜于紧凑;
  7. 可读性很重要;
  8. 特例不足以特殊到违背这些原则;
  9. 实用性胜过纯粹;
  10. 永远不要默默地忽视错误;
  11. 除非需要明确需要这样做;
  12. 面对模棱两可,拒绝猜测;
  13. 解决问题最直接的方法应该有一种,最好只有一种;
  14. 当然这是没法一蹴而就的,除非你是荷兰人;
  15. 做也许好过不做;
  16. 但不想就做还不如不做;
  17. 如果方案难以描述明白,那么一定是个糟糕的方案;
  18. 如果实现容易描述,那可能是个好方案;
  19. 命名空间是一种绝妙的理念,多加利用!

通过python命令行import this查看Pythonic(python之禅)

优美胜于丑陋

Python 具有语法简单、代码可读性强和命令类似英语等特点,这让编写 Python 代码比使用其他编程语言更容易、更高效。如下使用or and和|| &&构建语义相同的表达式:
示例:

# &&, ||ifa==0&&b==1||c==True:
# and, orifa==0andb==1orc==True:
# 这两个逻辑表达式在 Python 中是相同的# 从语义的角度来看,可以使用选择操作符来构造完全相同的表达式。

明了胜于晦涩

在 Python 中,良好的命名约定能让你的代码更清晰明了。一般来说,避免使用以下名称:
✓ 太宽泛,如my_list;
✓ 太冗长,如list_of_machine_learning_data_set;
✓ 太模糊,如“1”、“I”、“o”、“O”。
✓ Python包、模块名应该全部小写。
✓ 当需要使用多个单词时,使用下划线分割它们。
✓ 类名应遵循 UpperCaseCamelCase规范
✓ 变量、方法、函数应该采用小写(如果需要,用下划线分割)
✓ 常量名必须全大写(如果需要,用下划线分割)  

简单胜于复杂

很多时候,在处理迭代器时,我们还需要保存迭代计数,Python 通过提供一个名为enumerate()的内置函数简化这一任务。以下是一种不成熟的方法和推荐方法:

示例:

words= ['A', 'B', 'C']
# 不成熟的方法index=0forwordinwords:
print(index, word)
index+=1# 推荐方法forindex, wordinenumerate(words):
print(index, word)

2.Python常用编码规范说明

编码

◆ 如无特殊情况, 文件一律使用 UTF-8 编码
◆ 如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标识

缩进

◆ 统一使用 4 个空格进行缩进,不建议使用TAB, 更不要TAB和空格混用。

引号

◆ 自然语言使用双引号,例如:u"你好世界"
◆ 机器标识使用单引号,例如dict里的key。
◆ 正则表达式 使用原生的双引号 r"..."
◆ 文档字符串 (docstring) 使用三个双引号 """......"""

空行

◆ 编码格式声明、模块导入、常量和全局变量声明、顶级定义和执行代码之间空两行
◆ 顶级定义之间空两行,方法定义之间空一行
◆ 在函数或方法内部,可以在必要的地方空一行以增强节奏感,但应避免连续空行

文档编排

模块内容的顺序:模块说明和docstring—import—globals&constants—其他定义。其中import部分,又按标准、三方和自己编写顺序依次排放,之间空一行。
◆ 不要在一句import中多个库,比如import os, sys不推荐。

命名规范

✓ 模块尽量使用小写命名,首字母保持小写,尽量不要用下划线
✓ 类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头
✓ 函数名一律小写,如有多个单词,用下划线隔开
✓ 私有函数可用一个下划线开头
✓ 变量名尽量小写, 如有多个单词,用下划线隔开
✓ 常量采用全大写,如有多个单词,使用下划线隔开

变量

使用小写字母命名函数和变量,并用下划线分隔单词,提高代码可读性。
示例:
◆ name = "Python" #变量名
◆ job_title = "Software Engineer" #带有下划线的变量名
◆ populated_countries_list = [] #带有下划线的变量名
◆ _books = {} # 变量名私有化
◆ __dict = [] # 防止python内置库中的名称混淆

函数

函数的声明和变量一样也是通过小写字母和单下划线进行连接,对于函数私有化也是和声明变量类似。

defget_data(): 
pass函数的开头使用单下划线,将其进行私有化def_get_data():
pass对于使用Pyton中的关键字来进行命名的函数要使用双下划线。def__path():
pass
类的命名规范

类的名称应该像大多数其他语言一样使用驼峰大小写。

classUserInformation:
defget_user(id):
db=get_db_connection()
user=execute_query_for_user(id)
returnuser
常量的命名规范

通常应该用大写字母定义常量名称
◆ TOTAL = 56
◆ TIMOUT = 6
◆ MAX_OVERFLOW = 7

代码编排

✓ 缩进。4个空格的缩进(编辑器都可以完成此功能),不要使用TAB,更不能混合使用TAB和空格。
✓ 每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。
✓ 类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。

空格的使用

◆ 总体原则,避免不必要的空格,
◆ 各种右括号前不要加空格。
◆ 逗号、冒号、分号前不要加空格。
◆ 函数的左括号前不要加空格。如Func(1)。
◆ 序列的左括号前不要加空格。如list[2]。
◆ 操作符左右各加一个空格,不要为了对齐增加空格。
◆ 函数默认参数的赋值符左右省略空格。
◆ 不要将多句语句写在同一行,尽管使用‘;’允许。
◆ if/for/while语句中,即使执行语句只有一句,也必须另起一行。

注释及文档字符串

总体原则,错误的注释不如没有注释。所以当一段代码发生变化时,第一件事就是要修改注释!
注释必须使用英文,最好是完整的句子,首字母大写,句后要有结束符,结束符后跟两个空格,开始下一句。如果是短语,可以省略结束符。
◆ 块注释,在一段代码前增加的注释。在‘#’后加一空格。段落之间以只有‘#’的行间隔。
◆ 行注释,在一句代码后加注释。比如:x = x + 1 # Increment x,但是这种方式尽量少使用。  

3.Docstrings的使用

Docstrings可以在 Python 中声明代码的功能的,通常在方法,类和模块的开头使用,并且docstring是该对象的
__doc__特殊属性,一般采用“三重双引号”,下面列举在 Python 代码中编写 docstrings 的一些最佳实践 。

方法中使用docstring

defget_prime_number():
"""Get list of prime numbers between 1 to 100.""""

✓ 即使字符串只有一行,也使用三重引号。
✓ 三重引号中的字符串前后不应有任何空行
✓ 使用句点(.)结束docstring中的语句

多行的docstring

defcall_weather_api(url, location):
"""Get the weather of specific location.    Calling weather api to check for weather by using weather api and     location. Make sure you provide city name only, country and county     names won't be accepted and will throw exception if not found the     city name.    :param url:URL of the api to get weather.    :type url: str    :param location:Location of the city to get the weather.    :type location: str    :return: Give the weather information of given location.    :rtype: str"""

✓ 第一行是函数或类的简要描述
✓ 每一行语句的末尾有一个句号
✓ 文档字符串中的简要描述和摘要之间有一行空白

模块级别的docstring

一般在文件的顶部放置一个模块级的 docstring 来简要描述模块的使用,这些注释应该放在在导包之前,模块文档字符串应该表明模块的使用方法和功能。

"""This module contains all of the network related requests. This module will check for all the exceptions while making the network calls and raise exceptions for any unknown exception.Make sure that when you use this module,you handle these exceptions in client code as:NetworkError exception for network calls.NetworkNotFound exception if network not found."""importurllib3importjson

类级别的docstring

类docstring主要用于简要描述类的使用及其总体功能,下面列举如何编写类文档字符串。

单行类docstring
classStudent:
"""This class handle actions performed by a student."""def__init__(self):
pass
多行类docstring
classStudent:
"""Student class information.    This class handle actions performed by a student.    This class provides information about student full name, age,     roll-number and other information.    Usage:    import student    student = student.Student()    student.get_name()    """def__init__(self):
pass

小结

以上就是本篇文章的全部内容,下面作一个简单总结:

  1. Python包管理工具pip使用:更改镜像源、配置相关、批量导出/安装包;
  2. Python常用编码规范:常见编码规范类型、PEP8规范以及如何使用pycharm内置的PEP8、pycharm中导入第三方PEP8工具autopep8;
  3. 编写PythonIC代码:Python之禅的19条指导原则、常用编码规范说明(编码&缩进&引号&空行等的使用,以及变量&函数&类&常量等的命名规范)
相关文章
|
8天前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
20 6
|
21天前
|
存储 缓存 测试技术
Python中的装饰器:功能增强与代码复用的利器
在Python编程中,装饰器是一种强大而灵活的工具,它允许开发者以简洁优雅的方式增强函数或方法的功能。本文将深入探讨装饰器的定义、工作原理、应用场景以及如何自定义装饰器。通过实例演示,我们将展示装饰器如何在不修改原有代码的基础上添加新的行为,从而提高代码的可读性、可维护性和复用性。此外,我们还将讨论装饰器在实际应用中的一些最佳实践和潜在陷阱。
|
22天前
|
人工智能 数据挖掘 Python
Python编程基础:从零开始的代码旅程
【10月更文挑战第41天】在这篇文章中,我们将一起探索Python编程的世界。无论你是编程新手还是希望复习基础知识,本文都将是你的理想之选。我们将从最基础的语法讲起,逐步深入到更复杂的主题。文章将通过实例和练习,让你在实践中学习和理解Python编程。让我们一起开启这段代码之旅吧!
|
1天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
25 8
|
9天前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
29 11
|
10天前
|
测试技术 Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界中,装饰器是那些能够为我们的代码增添魔力的小精灵。它们不仅让代码看起来更加优雅,还能在不改变原有函数定义的情况下,增加额外的功能。本文将通过生动的例子和易于理解的语言,带你领略装饰器的奥秘,从基础概念到实际应用,一起开启Python装饰器的奇妙旅程。
28 11
|
6天前
|
Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!
|
7天前
|
程序员 测试技术 数据安全/隐私保护
深入理解Python装饰器:提升代码重用与可读性
本文旨在为中高级Python开发者提供一份关于装饰器的深度解析。通过探讨装饰器的基本原理、类型以及在实际项目中的应用案例,帮助读者更好地理解并运用这一强大的语言特性。不同于常规摘要,本文将以一个实际的软件开发场景引入,逐步揭示装饰器如何优化代码结构,提高开发效率和代码质量。
30 6
|
11天前
|
Python
如何提高Python代码的可读性?
如何提高Python代码的可读性?
24 4
|
11天前
|
Python
Python编程入门:从零开始的代码旅程
本文是一篇针对Python编程初学者的入门指南,将介绍Python的基本语法、数据类型、控制结构以及函数等概念。文章旨在帮助读者快速掌握Python编程的基础知识,并能够编写简单的Python程序。通过本文的学习,读者将能够理解Python代码的基本结构和逻辑,为进一步深入学习打下坚实的基础。