光山县住房和城乡建设局网站,汕头建站培训,宝安网站建设公司968,照片网站怎么做写代码不那么pythonic风格的#xff0c;多多少少都会让人有点难受。
什么是pythonic呢#xff1f;简而言之#xff0c;这是一种写代码时遵守的规范#xff0c;主打简洁、清晰、可读性高#xff0c;符合PEP 8#xff08;Python代码样式指南#xff09;约定的模式。 Pyth…写代码不那么pythonic风格的多多少少都会让人有点难受。
什么是pythonic呢简而言之这是一种写代码时遵守的规范主打简洁、清晰、可读性高符合PEP 8Python代码样式指南约定的模式。 Python社区发展几十年已经沉淀出一套更加科学规范的代码书写法则该踩的坑都帮你踩过了按这个来基本不会出什么错。
下面举几个不那么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, moder, newline, encodingutf-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, modew, newline, encodingutf-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, moder, newline, encodingutf-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, modew, newline, encodingutf-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代码行长度最好不要超过79vscode和pycharm等编辑器里都有代码长度指引线写代码时遇到它就是提示你要换行了。
连续代码一行代码很长需要分在多行写中被裹着的代码可能被 (), [], {} 包裹应该垂直左对齐。
def long_function_name(var_one, var_two, var_three,var_four):print(var_one)其实还有很多pythonic风格的规范需要大家注意建议按照约定俗成的方法去写第一原则是可读性强可读性强可读性强。