Python学习中的六个技巧小结

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. 参考

链接戳我

猜你喜欢

转载自blog.csdn.net/sgzqc/article/details/128725371