你的代码“balance”怎么样?找到简洁性和可读性的平衡点

 

你的代码“balance”怎么样?找到简洁性和可读性的平衡点

文章插图
图源:unsplash
Python对初学者非常友好,许多人在开始学习编程时都会选择Python 。简单易上手是你接触它之后发现的第一个优点 。进一步了解之后,你可能会被它的灵活性所吸引——可通过各种方式做同一功能 。
事实上,还有更便捷的解决方案 。代码越简洁,可读性越高且能够长期存在 。用Python编写简洁代码的方法有很多,本文想与大家分享笔者在日常Python项目中发现的特别有用的五个技巧 。
你的代码“balance”怎么样?找到简洁性和可读性的平衡点

文章插图
 
1.列表、字典和集合推导式列表推导式是众多Python程序员最喜欢的特征之一 。这是一种从迭代器创建列表的简洁方法 。基本语法是[expression for x in iterable] 。可以看一些示例进一步了解其用法:
>>># Create a list for subsequentoperations>>> numbers = [1, 2, 3, 4, 5, 6]>>>>>># Typical way to create a list consisting of squares>>> squares0 = []>>>for number in numbers:...squares0.Append(number*number)...>>># List comprehensions>>> squares1 = [number*number for number in numbers]在不使用列表推导式的情况下,必须创建一个空列表,并通过运行for循环来添加每个数字的平方,这通常需要三行代码 。使用列别推导式后,只需一行代码即可构建相同的平方列表 。
除了列表推导式,还有字典和集合推导式 。字典推导式有该基本语法 {key_expr:value_expr for x in iterable},集合推导式的基本语法是 {expressionfor x in iterable} 。与列表推导式示例类似,不使用推导式的情况下,需要多行代码来构建所需的字典和集合 。
>>># Dictionary comprehension>>> squares_dict = {number: number*number for number in numbers}>>> squares_dict{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36}>>>>>># Set comprehension>>> numbers_dups = [1, 2, 3, 4, 3, 2, 1]>>> squares_set = {number*number for number in numbers_dups}>>> squares_set{16, 1, 4, 9}
你的代码“balance”怎么样?找到简洁性和可读性的平衡点

文章插图
 
2.Lambda函数Lambda函数是Python中的匿名函数,通常用于小规模操作 。Lambda函数可以接受一到多个参数,只需一个表达式,其语法为lambda parameters:expression 。
你的代码“balance”怎么样?找到简洁性和可读性的平衡点

文章插图
图源:pixabay
笔者将使用内置sorted()函数演示lambda函数的用法 。具体而言,sorted()函数会使用key函数对迭代进行排序,该函数由key参数指定 。我们可以将lambda函数作为key参数,而不是用def关键字声明常规函数 。
>>># Create a list of students with theirgrading information>>> grades = [{'name': 'John', 'grade': 95}, {'name': 'Aaron', 'grade': 92}, {'name': 'Jennifer', 'grade': 100}]>>>>>># Sort using a regular function>>>defsort_grade(student):...return student['grade']...>>>sorted(grades, key=sort_grade)[{'name': 'Aaron', 'grade': 92}, {'name': 'John', 'grade': 95}, {'name': 'Jennifer', 'grade': 100}]>>>>>># Sort using a lambda>>>sorted(grades, key=lambda x: x['grade'])[{'name': 'Aaron', 'grade': 92}, {'name': 'John', 'grade': 95}, {'name': 'Jennifer', 'grade': 100}]如上所示,使用lambda函数可以编写出更简洁的调用sorted()函数的命令 。在使用正则表达式之前,必须先声明该函数,然后才能使用sorted()函数,这一定比直接使用lambda函数更繁琐 。
你的代码“balance”怎么样?找到简洁性和可读性的平衡点

文章插图
 
3.命名元组作数据结构元组可以存储一些相关数据,但是使用起来并不顺手,特别是涉及特定元素时,必须记住顺序并使用特定元素的正确索引 。如果不想使用元组,虽然可以构建一个自定义类来管理相关数据,但namedtuple数据类型是一种非常有用的轻量级数据结构 。
通过集合模块,namedtuple数据类型采用以下基本语法:namedtuple(Typename,field_names) 。语法并不直截了当,不过从概念上来说是容易理解的 。
来看看示例 。理想的特性是创建一个可以存储学生信息的数据结构,包括姓名、性别和学生ID号 。
>>># Use a custom class>>>classStudent0:...def__init__(self, name, gender, student_id):...self.name = name...self.gender = gender...self.student_id = student_id...>>> s0 =Student0('John', 'M', 2020001)>>>f"Name: {s0.name}; Gender: {s0.gender}; ID #: {s0.student_id}"'Name: John; Gender: M; ID #: 2020001'>>>>>># Use the namedtuple>>>from collections import namedtuple>>>Student1=namedtuple("Student1", ["name", "gender", "student_id"])>>> s1 =Student1('Jennifer', 'F', 2020002)>>>f"Name: {s1.name}; Gender: {s1.gender}; ID #: {s1.student_id}"'Name: Jennifer; Gender: F; ID #:2020002'


推荐阅读