写代码不那么pythonic风格的,多多少少都会让人有点难受。
什么是pythonic呢?简而言之,这是一种写代码时遵守的规范,主打简洁、清晰、可读性高,符合PEP 8(Python代码样式指南)约定的模式。
在Python编程社区中,遵守Pythonic风格(即符合Python社区公认的最佳实践、编码习惯和设计哲学)被视为一项重要的原则。这种风格不仅关乎代码的外观,更深刻地影响了代码的可读性、可维护性、执行效率以及开发者之间的协作效率。以下是几个关键原因,解释了为什么Python代码需要遵守Pythonic风格:
增强代码可读性:Pythonic风格强调代码的清晰和简洁。通过使用有意义的变量名、合理的函数命名、以及遵循PEP 8等编码规范,Python代码变得更加易于阅读和理解。这不仅有助于开发者快速把握代码逻辑,还能减少因误解代码意图而导致的错误。
提高开发效率:遵循Pythonic风格意味着遵循Python的设计哲学,如“用一种方法,最好是只有一种方法来做一件事”。这种一致性减少了在解决问题时需要考虑的多种可能,使得开发者能够更快地找到并应用最合适的解决方案。此外,Pythonic风格还鼓励使用Python内置的库和函数,这些通常都经过高度优化,能够显著提升代码的执行效率。
促进团队协作:在团队项目中,遵循统一的编码风格是非常重要的。Pythonic风格为团队成员提供了一个共同的编码标准,有助于减少因个人习惯差异而导致的代码风格冲突。这不仅可以提升团队协作的顺畅度,还能增强团队成员之间的信任和默契。
增强代码的可维护性:随着时间的推移,项目中的代码可能会经历多次修改和扩展。遵循Pythonic风格可以使得这些修改和扩展更加容易进行,因为新的开发者可以更快地理解现有代码的结构和逻辑。此外,Pythonic风格还鼓励编写易于测试和重构的代码,这有助于保持代码的长期可维护性。
获得社区认同:Python社区非常注重代码质量和风格的一致性。遵循Pythonic风格的代码更容易获得社区其他成员的认同和赞赏。这不仅可以提升开发者的个人声誉,还有助于吸引更多的贡献者和支持者加入到项目中来。
下面举几个不那么pythonic的代码案例,虽然不会出错,但十分不建议这样写。
1、函数、变量命名无意义、不规范
很多人图省事,使用a、aa、bbb这样无意义的变量名、函数名,这样在编程中会大大降低代码的可读性,也影响代码质量。
def a(revenue, cost):
"""
计算销售利润率。
:param revenue: 销售额(或总收入)
:param cost: 成本
:return: 销售利润率(以百分比表示)
"""
if revenue <= 0 or cost < 0:
return "错误:销售额必须大于0,成本不能为负数。"
aa = revenue - cost
bbb = (aa / revenue) * 100
return bbb
更有初学者使用中文来作为变量名,虽然在语法上是允许的,但会引起歧义,不符合代码规范
年龄 = 30
名字 = "张三"
print("{}的年龄是{}".format(名字,年龄))
2、不善于使用函数和类,重复写代码
Python是鼓励用函数和类去封装一些重复用的功能,这样能增加代码的可读性,也减少不必要的劳动,但一些人就是喜欢写很长的代码,导致看着很冗余。
在Python中大家可以把一个复杂的功能,用多个函数去分解,一个函数代码行数最好不要超过十行,如果确实需要很多代码,那就进行分解,多写几个函数来实现。
比如以下的函数,用来实现csv文件的读取、行去重、空值剔除、保存等功能。
import csv
def process_csv(input_file, output_file):
"""
读取CSV文件,去重,剔除空值,并保存到新文件。
:param input_file: 输入的CSV文件路径
:param output_file: 输出的CSV文件路径
"""
# 读取CSV文件
with open(input_file, mode='r', newline='', encoding='utf-8') as file:
reader = csv.reader(file)
rows = [row for row in reader if row] # 剔除空行
# 去重
unique_rows = []
for row in rows:
# 将行转换为元组以用于集合去重
unique_rows.append(tuple(row))
# 剔除空值
processed_rows = [[cell for cell in row if cell] for row in unique_rows]
# 转换回列表以写入CSV文件
processed_rows = [[str(cell) for cell in row] for row in processed_rows]
# 写入新的CSV文件
with open(output_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerows(processed_rows)
当你看到这个函数,是不是觉得有点冗长,一个函数实现了四个功能,不易阅读也不利于重复利用。
如果把它拆分成四段函数,分别实现读取、行去重、空值剔除、保存这四个功能,就会更加清晰。
import csv
def read_csv(file_path):
"""
读取CSV文件并返回行的列表。
:param file_path: CSV文件路径
:return: CSV文件行的列表
"""
with open(file_path, mode='r', newline='', encoding='utf-8') as file:
reader = csv.reader(file)
return [row for row in reader if row] # 剔除空行
def remove_duplicates(rows):
"""
去除行列表中的重复行。
:param rows: 行的列表
:return: 去重后的行列表
"""
return list(set(tuple(row) for row in rows))
def remove_empty_values(rows):
"""
从行列表中剔除含有空值的行。
:param rows: 行的列表
:return: 剔除空值后的行列表
"""
return [[cell for cell in row if cell] for row in rows]
def write_csv(file_path, rows):
"""
将行列表写入CSV文件。
:param file_path: CSV文件路径
:param rows: 要写入的行列表
"""
with open(file_path, mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerows(rows)
3、使用很复杂的列表推导式,较难阅读
列表推导式可以简化列表的创建,既实用还能让代码更加美观,但列表推导式只适合创建逻辑简单的列表,对于很复杂且代码量大的列表,是不建议用列表推导式的,比如以下案例。
nested_list = [[(i * j, i + j, i - j) for j in range(1, 4)] for i in range(5, 10)]
改成如下循环函数是否更好?
def generate_nested_list(start_i, end_i):
nested_list = []
for i in range(start_i, end_i):
sublist = []
for j in range(1, 4):
sublist.append((i * j, i + j, i - j))
nested_list.append(sublist)
return nested_list
4、代码行特别长,也很难阅读
一般Python代码行长度最好不要超过79,vscode和pycharm等编辑器里都有代码长度指引线,写代码时遇到它就是提示你要换行了。
连续代码(一行代码很长,需要分在多行写)中被裹着的代码(可能被 (), [], {} 包裹)应该垂直(左)对齐。
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
其实还有很多pythonic风格的规范,需要大家注意,建议按照约定俗成的方法去写,第一原则是可读性强,可读性强,可读性强。
这里分享给大家一套免费的学习资料,包含视频、源码/电子书,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以加我微信一起来学习交流。
① Python所有方向的学习路线图,清楚各个方向要学什么东西
②Python、PyCharm学习工具包全家桶,环境配置教程视频
③Python全套电子书籍PDF,全部都是干货知识
④ 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
⑤ 100多个Python实战案例,学习不再是只会理论
👉 这份完整版的Python学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费
】
(Python全套入门学习资料免费分享)链接安全,放心点击!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频全套
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
七、Python副业兼职路线
👉 这份完整版的Python学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费
】
(Python全套入门学习资料免费分享)链接安全,放心点击!