社区所有版块导航
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

编写更多 pythonic 代码(二)——使用 PEP 8 编写漂亮的 Python 代码

IT大咖说 • 2 年前 • 474 次点击  

一、什么是 PEP 8 以及为什么需要

PEP 8 是 Python 社区的一份官方风格指南,旨在帮助 Python 开发人员编写清晰、可读性强且易于维护的代码。

PEP 8 中包括了对Python 编码的各个方面的规范,例如变量命名、缩进、注释、代码布局等。通过遵循这些规范,能够使程序更具可读性和可维护性,同时也有助于开发人员之间合作和提高代码质量。

PEP 8 的简要说明可以在 Python 官方网站上找到,并且已被许多编辑器和IDE集成到其编码支持中,如 PyCharm、Visual Studio Code等。此外,Python社区还提供了其他相关的PEP,例如PEP257关于文档编写规范的建议。

总之,PEP 8 提供了一种约定俗成的 Python 代码编写规范,并通过这种方式提高了 Python 代码的可读性和可维护性。无论是初学者还是有经验的 Python 开发人员,都应该尽可能地遵守 PEP 8 指南来编写漂亮的 Python 代码。

二、python命名约定

在Python编程语言中,有一些命名约定需要遵循,以达到代码的可读性和易维护性。以下是 Python 的命名约定:

  • 变量名和函数名应尽量小写,并可以使用下划线来分隔单词(例如 my_variable)。

  • 类名应该采用驼峰命名法(CamelCase),即每个单词的首字母都应大写(例如MyClass)。

  • 函数命名应该描述函数完成的任务,并且可以使用动词或名词短语来表示(例如calculate_sum或sum_up_numbers)。

  • 模块名必须是小写字母并且可以包含下划线。 如果名称有多个单词,则应将它们连接起来,并以下划线命名(例如my_module)。

  • 常量的命名应该全部大写,多个单词之间用下划线分隔(例:MY_CONSTANT)。

  • 避免使用单个字符作为变量名,除非它们代表计数器或迭代器。

  • 为了避免与Python关键字冲突,不要使用保留字作为变量和函数名。

总之,Python的命名约定主要着重于代码的可读性和易于维护性。通过遵循这些常规命名约定,开发人员可以更好地组织和说明他们的代码,使其更易于阅读、理解和修改。

三、漂亮的python代码布局

为了编写漂亮的Python代码布局,可以考虑以下几个方面:

  • 缩进:对于代码块内缩进,请使用4个空格或一个制表符进行缩进。在整个文件中需保持一致。

  • 行长度: Python官方建议每行不要超过79个字符。 对于较长的文本字符串,应该使用隐式续行将其分成多行。

  • 垂直空白: 码上的 段落与段落间、函数与函数间、逻辑段与逻辑段之间使用空白行分割, 以突出程序高层组织方式, 改善可读性。

下面是一个简单规范的程序样例,严格按照上述原则格式化:

# 引入必要的模块
import os
import sys

# 定义变量
my_variable = "Hello, world!"

# 定义函数
def my_function():
print("This is my function.")

# 从标准输入读取数据
input_data = input("Enter some data: ")

# 检查输入是否为空if not input_data:
print("Error: no data entered, please try again.")
sys.exit(1)

# 使用当前目录创建一个文件并写入数据
with open(os.path.join(".", "output.txt"), "w") as f:
f.write(input_data)
f.write("\n")
f.write(my_variable)

# 调用函数
my_function()

以上代码遵循以下规约:

  • 使用4个空格作为缩进。

  • 一行不超过79个字符(除非必要)。

  • 段落或逻辑块之间用空白行隔开,如变量定义、函数定义、输入输出等。

  • 函数定义示例采用下划线式样的命名方式。

  • 使用相对 import 导入模块。

当然,这只是其中一种基本的 Python 代码布局规范,具体的布局规定可能随着项目和团队的需要而有所不同。

四、正确处理 Python 代码缩进

在Python中,缩进(空格或制表符)是非常重要的,因为它们明确了代码块的开始和结束。因此,正确的 Python 代码缩进应该遵循以下准则:

  • 使用4个空格作为每一级别缩进的标准。不要混合使用制表符和空格来缩进。

  • 不同的代码块应有不同的缩进级别。例如,循环、条件语句、函数定义等都应该有自己单独的缩进级别。

  • 在函数、类、循环和条件语句后面,都要用冒号(:)来标记代码块的开始。接下来的每一行必须都相对于这个冒号进行缩进,并保持相同的缩进级别。

  • 缩进级别可以在代码块内部再嵌套下去,应选择合适的方式使代码更易读。

  • Python通常会忽略由单行字符串、注释、空白行组成的行,但是这些结构也可能影响缩进规则。 请特别注意三引号字符串,切勿忘记换行符。

  • Python IDE(集成开发环境)会智能地缩进你的代码,但最好在代码编辑器中启用 "显示空格" 选项 以在缩进上检查问题。较为建议的IDE有:Visual Studio Code、PyCharm等。

以下是一个示例,展示了如何使用正确的缩进来编写 Python 代码:

# 定义函数def my_function():
def my_function():
for i in range(10):
if i % 2 == 0:
print(i, "is even")
else:
print(i, "is odd")

# 调用函数
my_function()

上述代码中,if和else语句块都具有不同于for循环块的缩进级别。这符合了Python的准则,并且使得代码块可以清晰地看出其作用域。

五、格式化 Python 注释

Python注释是代码中非常重要的一种元素,它提供了对代码片段的解释、文档说明或临时性调试。保留好注释有助于代码的可读性,维护和升级。

下面是一些格式化 Python 注释的建议:

  • 单行注释应该以#字符开始,并放在代码行上方两个空格的位置。多个单行注释,在一条语句后空一行并排列。

# 函数返回值为一个数组
# 数组第一项表示文件名, 第二项表示行号
return [filename, line_number]
  • 块注释应该使用三引号 (""" ...),可以用来记录函数定义、模块说明等。 ``` 可以在代码块后短时间内附加块注释,但须开头对齐。

"""
This module defines a User class.
"""


class User:
"""
The User class stores information about a user,
including their name and email address.
"""


def __init__(self, name, email):
"""
Create a new User object with the given name and email address.
"""

self.name = name
self.email = email

def send_email(self, subject, body):
"""
Send an email to this user with the given subject and body.
"""

# Functionality here...
  • 文档字符串(docstrings)是函数或模块的第一个语句,写在函数定义上面。遵循PEP 257标准规范化即 一个语句结尾或后接第二个"""。

def my_function(x, y):
"""
This function adds two numbers together and returns the result.

Args:
x: The first number to add.
y: The second number to add.

Returns:
The sum of x and y.
"""

return x + y

在撰写注释时注意,除Docstrings之外的块注释前空一行并紧跟代码,以提高代码可读性。注释内容需简洁明了,用于描述作用,一些重要实现方式等。

总之,注释规范可以使你的Python代码变得更易懂和易于维护。

六、表达式和语句中的空格

在Python中,空格有时对于表达式和语句的正确性和可读性是非常重要的。

表达式是指用来计算并产生值的代码片段。以下规则建议你需要遵循:

  • 在二元操作符两侧加上一个空格,使得操作符与运算对象分开,比如加号、减号、乘号和除号等,例如 a + b 或者 x * y 。

  • 在逗号(,)后添加一个空格,例如 a, b, c 或者 x, y, z 。

  • 非必要时可以使用括号()来提高表达式的可读性,例如 (a + b) * c。

  • 不需要在一元操作符后加上空格,例如 -5 或者 not flag。

语句是指执行某些操作的完整过程。以下规则建议你需要遵循:

  • 每行代码都应该尽量保持简短,通常一行不超过80个字符,这样能提高代码可读性。

  • 在命令关键字(例如if, for, while, def等)和后面所跟随的括号或冒号(:)之间添加一个空格。例如,if x > 3:。

  • 同一个语句块内部必须保持相同的缩进级别,可以使用四个空格或一个Tab键来实现。

  • 可以增加空白行来区分不同功能代码块,但不要在代码块内部增加太多空白行。

以上是Python中表达式和语句中的常规空格规则,正确使用空格可以使代码更清晰易懂且风格统一。

七、该做与不该做:Python 编程建议

以下是一些Python编程中的建议:

应该做:

  • 编写易于理解和维护的代码。可读性是非常重要的,因为代码往往会被多个人阅读和修改。

  • 熟悉PEP 8代码规范,保持代码风格的统一性。

  • 使用有意义且表达清晰的变量名和函数名,并尽可能避免使用单字母的变量名。

  • 分解复杂问题并创建函数或类能够提高代码的可维护性。

  • 在处理异常时发挥Python内置异常处理机制的作用,以提高代码的稳定性和正确性。

  • 进行文档化,包括在函数定义中添加注释和编写项目文档。

  • 充分利用Python社区的资源,如第三方库和代码片段等,并按需求选择自己所需的内容。

不应该做:

  • 不要在循环中使用不必要的变量计数器,特别是在迭代大型数据集时。

  • 避免使用全局变量,在函数内部传递参数并返回结果可以更好地操作数据。

  • 避免硬编码常量,并将其定义为有意义的变量名来提供更具可读性。

  • 不要过度注重代码效率。在可读性、可维护性等因素基础上,优化代码的效率才有意义。

  • 不要盲目地进行异常处理,因为可能会隐藏掉潜在的问题,而不是解决它们。

这些是Python编程中的一些基本建议。需要根据具体场景和实际需求进行灵活运用,确保代码清晰、可读性强和可维护性较高。

八、使用Linters获得更好的代码和结论

使用Linters是提高代码质量的好方法。 Linters是一种静态代码分析工具,可帮助发现可能导致编码错误和问题的代码模式。

以下是使用Linter可以获得更好代码的优势:

  • 发现并修复潜在的错误:Linters可以检测并报告不合规范的编程风格、不安全的操作和语法错误等问题。这有助于在运行代码之前发现问题并进行纠正,从而减少代码错误和bug的数量。

  • 统一代码格式:Linters可以确保所有代码都按照一致的约定和准则编写。这有助于保持依照同一惯例开发,并且对于多人参与开发的项目特别有用。

  • 提供解决方案:当一个Linter检测到一个问题时,通常会提供广泛的建议或自动化的解决方案。这使开发人员能够快速修复问题,从而大大减少了犯错的机会。

  • 易于内部集成:许多Linters可以通过插件或其他应用程序便捷地集成到编码过程中,因此无需切换工具或界面即可执行检查。

  • 自定义检测:Linters通常允许用户自定义其风格约定和标准,以匹配其个人或团队的偏好。

总之,Linters是一种有益于编写高质量代码的工具,大大简化了代码分析和修复过程,并为开发人员提供了额外的辅助。对于长期项目而言,使用Linters可能会产生巨大的效益和价值。


来源https://www.toutiao.com/article/7244754496868958780/?log_from=d22eb0e29fbb1_1686877091047

“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com





来都来了,走啥走,留个言呗~




 IT大咖说  |  关于版权 

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!


相关推荐


推荐文章

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