让你的代码更优雅的9个Python绝妙技巧!

在这里插入图片描述

1.使用"product()"函数避免嵌套的Python循环

当程序变得复杂时,就不可避免地要编写嵌套循环。然而,嵌套循环会增加程序的阅读和维护难度。
幸运的是,在 Python 中通过内置的"product()"函数可以避免嵌套循环。
  • 例如,我们有一个包含 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

2.海象运算符:赋值表达式的一个可爱技巧

  • 从Python 3.8开始,出现了一种称为“海象运算符”的新语法,它可以将值作为较大表达式的一部分分配给变量。
运算符":="的可爱名字来源于海象的眼睛和獠牙。
  • 这个语法非常容易理解。例如,如果我们想将以下两行 Python 代码写在一行中,该怎么做呢?
author = "Yang"
print(author)
# Yang
  • 不幸的是,我们不能直接将赋值放入"print()"函数中。如果我们尝试一下,将会出现 TypeError:
print(author="Yang")
# TypeError: 'author' is an invalid keyword argument for print()
  • 感谢海象运算符,我们真的可以用一行代码完成此操作:
print(author:="Yang")  
# Yang

3.三元条件运算符:用一行编写简单的 If-Else 结构

  • if-else 条件在编程世界中无处不在。为了让简单的逻辑更容易表达,Python为我们提供了三元运算符。简而言之,它只允许将"if-else"条件放在一行中:
min = a if a < b else b
  • 显然,上面的代码比下面的要简洁得多:
if a<b:
  min = a
else:
  min = b

4.使用 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)

5.列表推导式:以 Python 方式获取列表

说列表理解使你的代码变得优雅仍然是轻描淡写的。它可以节省您大量的打字和时间,但仍然保持代码的可读性。很少有编程语言可以做到这一点。
Genius = ["Jerry", "Jack", "tom", "yang"]
L1 = [name if name.startswith('y') else 'Not Genius' for name in Genius]
print(L1)
# ['Not Genius', 'Not Genius', 'Not Genius', 'yang']
  • 请随意欣赏一下上述优雅的程序,想想如果没有列表理解技巧,你需要写多少行代码。

6.利用 Python 中的高阶函数

Python 内置了一些高阶函数,可以方便我们编写一些通用逻辑。
  • 例如, "map()"函数是一个著名且常用的高阶函数。它接收两个参数,一个是函数,另一个是迭代。执行映射函数会将函数应用于可迭代的每个元素。
names = ['yAnG', 'MASk', 'thoMas', 'LISA']
names = map(str.capitalize, names)
print(list(names))
# ['Yang', 'Mask', 'Thomas', 'Lisa']
如上面的示例所示,借助"map()"函数,我们可以避免编写 for 循环来将 names 列表中的每个单词大写。
另一个著名的高阶函数是 “reduce()”。顾名思义,它将一个函数应用到一个可迭代对象中,并对其进行累积操作。
  • 例如,以下示例将列表转换为一个字符串:
from functools import reduce

city = ['L', 'o', 'n', 'd', 'o', 'n', 2, 0, 2, 0]
city_to_str = reduce(lambda x, y: str(x) + str(y), city)
print(city_to_str)
# London2020

7.联合运算符:合并字典的最简单方法

合并字典是日常 Python 编程中的常见需求。有很多方法可以做到这一点。但在 Python 3.9 之前,所有这些方法都很难看。
  • 从 Python 3.9 开始,我们终于得到了最优雅的字典合并方式——使用联合运算符。
cities_us = {'New York City': 'US', 'Los Angeles': 'US'}
cities_uk = {'London': 'UK', 'Birmingham': 'UK'}

cities = cities_us|cities_uk
print(cities)
# {'New York City': 'US', 'Los Angeles': 'US', 'London': 'UK', 'Birmingham': 'UK'}
  • 如上面的示例所示,我们可以简单地使用 | 运算符来合并两个不同的字典。更重要的是,它还支持就地合并:
cities_us = {'New York City': 'US', 'Los Angeles': 'US'}
cities_uk = {'London': 'UK', 'Birmingham': 'UK'}

cities_us |= cities_uk
print(cities_us)
# {'New York City': 'US', 'Los Angeles': 'US', 'London': 'UK', 'Birmingham': 'UK'}

8.F-Strings:Pythonic 字符串格式化技术

  • 几乎所有编程语言都支持字符串格式化语法。但并不是每一种技术都像 Python 的 f 字符串技术一样优雅。
pi = 3.1415926
print(f'Pi is approximately equal to {pi:.2f}')
# Pi is approximately equal to 3.14

id = 1  # need to print a 3-digit number
print(f"The id is {id:03d}")
# The id is 001

N = 1000000000  # need to add separator
print(f'His networth is ${N:,d}')
# His networth is $1,000,000,000
如上面的程序所示,使用 f 字符串技巧,我们可以应用 Python 变量并在 f 字符串内定义其格式规范。
让 f 字符串技术更加令人惊叹的是我们可以将表达式嵌入到 f 字符串中。嵌入表达式将在运行时评估。
  • 以下示例将借助 f 字符串打印今天的时间:
from datetime import datetime

print(f"Today is {datetime.today()}")
# Today is 2021-07-31 18:20:48.956829

9.使用星号来解包可迭代和解构赋值

如何将列表、元组和集合合并到一个列表中?
  • 最优雅的方法是使用星号:
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"变量接收中间的项目作为列表。
    图片

总结

  • 最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!

文末福利

  • 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。

包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!

  • ① Python所有方向的学习路线图,清楚各个方向要学什么东西
  • ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
  • ③ 100多个Python实战案例,学习不再是只会理论
  • ④ 华为出品独家Python漫画教程,手机也能学习

可以扫描下方二维码领取【保证100%免费

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值