欢迎来到啾啾的博客🐱。
记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。
有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。
目录
- 引言
- [1 什么是 Pythonic 规范?](#1 什么是 Pythonic 规范?)
- [2 为什么需要遵循 Pythonic 规范?](#2 为什么需要遵循 Pythonic 规范?)
- [3 Pythonic 规范的常见体现](#3 Pythonic 规范的常见体现)
-
- [3.1 变量和函数命名](#3.1 变量和函数命名)
- [3.2 类和常量命名](#3.2 类和常量命名)
- [3.3 缩进](#3.3 缩进)
- [3.4 列表推导式 (List Comprehensions)](#3.4 列表推导式 (List Comprehensions))
- [3.5 迭代 (Iteration)](#3.5 迭代 (Iteration))
- [3.6 上下文管理器 (Context Managers)](#3.6 上下文管理器 (Context Managers))
- [3.7 使用默认参数](#3.7 使用默认参数)
- [3.8 避免不必要的条件判断](#3.8 避免不必要的条件判断)
- [3.9 链式比较](#3.9 链式比较)
- [4 PEP 8:Python 编码风格指南](#4 PEP 8:Python 编码风格指南)
引言
AI使用声明:本篇使用AI生成,人工校验核对(PEP8官网资料为准),就Pythonic规范做摘要。
1 什么是 Pythonic 规范?
Pythonic 规范是指编写符合 Python 语言习惯和哲学的代码风格。它不仅仅是一套语法规则,更是一种编程思维。遵循 Pythonic 规范能让你的代码更具可读性、简洁性、效率和可维护性。换句话说,当其他 Python 开发者看到你的代码时,他们会觉得这是"Python 风格"的代码,而不是像其他语言硬套过来的。
2 为什么需要遵循 Pythonic 规范?
遵循 Pythonic 规范的好处多多:
-
提高可读性:Python 强调可读性。Pythonic 代码通常更易于理解,因为它遵循了大家约定俗成的模式。
-
提高可维护性:易于阅读的代码也更易于修改和维护。当项目需要迭代或修复 bug 时,维护者能更快地理解代码逻辑。
-
提高效率:很多 Pythonic 的写法背后是 C 语言实现的优化,例如列表推导式通常比循环更快。
-
减少错误:清晰简洁的代码逻辑能有效减少潜在的 bug。
-
团队协作:在团队项目中,统一的编码风格能减少沟通成本,提高开发效率。
3 Pythonic 规范的常见体现
以下是一些 Pythonic 规范的常见体现,涵盖了从命名到代码结构的多个方面:
3.1 变量和函数命名
-
使用有意义的名称:变量名和函数名应清晰地表达其用途。
-
非 Pythonic :
a = 10
-
Pythonic :
count = 10
-
-
小写字母和下划线 :变量、函数、方法和模块名都应使用小写字母和下划线分隔单词(
snake_case
)。-
非 Pythonic :
myVariableName
,My_Function
-
Pythonic :
my_variable_name
,my_function
-
3.2 类和常量命名
-
驼峰命名法(PascalCase):类名应使用每个单词首字母大写的形式。
-
非 Pythonic :
my_class
-
Pythonic :
MyClass
-
-
全大写和下划线:常量名应使用全大写字母和下划线分隔单词。
-
非 Pythonic :
PI
-
Pythonic :
MAX_CONNECTIONS
-
3.3 缩进
-
使用 4 个空格 :Python 强制使用缩进表示代码块。PEP 8 推荐使用 4 个空格作为标准缩进,而不是 Tab 键。
- 统一的缩进方式可以避免因不同编辑器设置导致的混乱。
3.4 列表推导式 (List Comprehensions)
-
简洁地创建列表:当需要根据现有列表或其他可迭代对象创建新列表时,列表推导式通常更简洁、高效。
-
非 Pythonic:
python
new_list = []
for item in old_list:
if condition(item):
new_list.append(transform(item))
- Pythonic:
python
new_list = [transform(item) for item in old_list if condition(item)]
3.5 迭代 (Iteration)
-
直接迭代:直接迭代可迭代对象,而不是使用索引。
-
非 Pythonic:
python
for i in range(len(my_list)):
print(my_list[i])
- Pythonic:
python
for item in my_list:
print(item)
-
使用
enumerate
获取索引和值:当需要同时获取元素和其索引时。 -
非 Pythonic:
python
for i in range(len(my_list)):
print(i, my_list[i])
- Pythonic:
python
for index, item in enumerate(my_list):
print(index, item)
-
使用
zip
同时迭代多个序列:当需要同时遍历多个等长序列时。 -
非 Pythonic:
python
for i in range(len(list1)):
print(list1[i], list2[i])
- Pythonic:
python
for item1, item2 in zip(list1, list2):
print(item1, item2)
3.6 上下文管理器 (Context Managers)
-
使用
with
语句 :对于需要自动管理资源(如文件、锁等)的场景,使用with
语句可以确保资源正确地获取和释放。 -
非 Pythonic:
python
f = open("file.txt", "r")
data = f.read()
f.close()
- Pythonic:
python
with open("file.txt", "r") as f:
data = f.read()
3.7 使用默认参数
-
为函数参数设置默认值:可以减少函数调用的复杂度,并提供灵活性。
-
非 Pythonic:
python
def greet(name):
if name:
print(f"Hello, {name}!")
else:
print("Hello, stranger!")
- Pythonic:
python
def greet(name="stranger"):
print(f"Hello, {name}!")
在 Python 的生产环境中,将
None
作为可变默认参数的默认值是一种非常常见的且推荐的 Pythonic 做法。
3.8 避免不必要的条件判断
-
利用布尔值特性:Python 中很多对象在布尔上下文中具有真值或假值。
-
非 Pythonic:
python
if len(my_list) > 0:
# do something
- Pythonic:
python
if my_list: # 空列表为 False
# do something
-
使用
in
运算符:检查元素是否存在于集合中。 -
非 Pythonic:
python
found = False
for item in my_list:
if item == target:
found = True
break
if found:
# do something
- Pythonic:
python
if target in my_list:
# do something
3.9 链式比较
-
简洁的范围判断:
-
非 Pythonic:
python
if x > 0 and x < 10:
# do something
- Pythonic:
python
if 0 < x < 10:
# do something
4 PEP 8:Python 编码风格指南
Pythonic 规范的核心是 PEP 8 (Python Enhancement Proposal 8),它是 Python 官方推荐的编码风格指南。PEP 8 详细规定了代码布局、命名规范、空格使用、注释等方方面面。虽然遵循 PEP 8 不是强制性的,但它极大地促进了 Python 代码的统一性和可读性。
PEP 8官网:https://pep8.org/#introduction