1. 引言
“Beautiful is better than ugly.”
上述为著名的The Zen of Python的第一句话,也是有追求的python开发人员的信条之一。
所以我们的问题来了: 如何编写漂亮的Python代码?
本文重点通过九个示例向大家展示Python中的六个小技巧,以帮助大家在日常工作中编写更加优雅的Python程序。
2. 使用product函数代替嵌套循环
当我们的程序变得复杂时,不可避免地需要编写嵌套循环。然而,嵌套循环将使程序更难阅读和维护。
幸运的是,我们可以通过内置的product()
函数来避免Python中的嵌套循环。
例如,我们有这样一个程序,它包含3级嵌套For
循环:
list_a = [1, 2020, 70]
list_b = [2, 4, 7, 2000]
list_c = [3, 70, 7]
for a in list_a:
for b in list_b:
for c in list_c:
if a + b + c == 2077:
print(a, b, c)
# 70 2000 7
为了使代码更整洁,我们可以使用来自itertools
模块的product()
函数来优化代码:
from itertools import product
list_a = [1, 2020, 70]
list_b = [2, 4, 7, 2000]
list_c = [3, 70, 7]
for a, b, c in product(list_a, list_b, list_c):
if a + b + c == 2077:
print(a, b, c)
# 70 2000 7
3. 海象运算符:赋值表达式中的可爱技巧
自Python3.8以来,出现了一种名为walrus operator
的新语法,可以使值的赋值传递到表达式里。
海象运算符:=
,其可爱的名字来自于海象的眼睛和象牙。
该特性的语法非常简单,比如我们希望将上述两行代码用一行代码来实现,该如何操作呢?
author = "Zhao"
print(author)
# Zhao
不幸的是,我们不能直接将赋值表达式放入print()
函数中。如果我们尝试它,将会有一个TypeError
:
print(author="Zhao")
# TypeError: 'author' is an invalid keyword argument for print()
多亏了海象操作符,我们真的可以在一行中完成:
print(author:="Zhao")
# Zhao
4. 三目运算符:在一行中编写简单的If-Else结构
if-else
条件语句在编程世界中随处可见。为了使简单的逻辑易于表达,Python为我们提供了三目运算符。简单地说,它只允许在一行中放入if-else
条件:
min = a if a < b else b
显然,上面的代码比以下的代码整洁得多:
if a<b:
min = a
else:
min = b
5. 使用Lambda表达式定义简单函数
如果我们只想定义一个简单的函数,可能不需要使用传统的语法。lambda
表达式往往是一个更优雅的选项。
例如,下面的函数主要用于实现求解斐波那契数的功能:
def fib(x):
if x<=1:
return x
else:
return fib(x-1) + fib(x-2)
它工作得很完美,但代码本身有点丑陋。让我们写一行代码来实现相同的函数:
fib = lambda x: x if x <= 1 else fib(x - 1) + fib(x - 2)
6. 使用列表生成式
使用列表生成式可以使我们的代码更加优雅,这仍然是一种保守的说法。因为它可以节省大量的输入时间,同时保持代码的可读性。很少有编程语言能做到这一点。
Genius = ["Jerry", "Jack", "tom", "yang"]
L1 = ['Genius' if name.startswith('y') else 'Not Genius' for name in Genius]
print(L1)
# ['Not Genius', 'Not Genius', 'Not Genius', 'Genius']
请随意享受一下上面的优雅程序,并考虑一下如果没有列表生成式相关技巧,我们需要编写多少行代码。
7. 使用星号来解包可迭代对象
如何将一个列表,一个元组和一个集合合并成一个列表?
最优雅的方式是使用星号*
:
A = [1, 2, 3]
B = (4, 5, 6)
C = {7, 8, 9}
L = [*A, *B, *C]
print(L)
# [1, 2, 3, 4, 5, 6, 8, 9, 7]
如上所述,星号可以用作可迭代对象的前缀来解包相应的元素。
除了解包可迭代对象外,星号还可以用于Python中解构赋值:
a, *mid, b = [1, 2, 3, 4, 5, 6]
print(a, mid, b)
# 1 [2, 3, 4, 5] 6
如上所示,在星号*
的帮助下,mid
变量将中间的项作为列表接收。
8. 总结
本文重点介绍了Python中常用的六个小技巧,并给出了相应的代码示例,使用它们可以提升大家的编码效率。
您学废了嘛?
9. 参考
链接戳我