十个好用到爆炸的Python技巧

1.列表推导式:简洁高效的列表创建

列表推导式提供了一种精简而强大的方式来创建列表,它可以将复杂的循环和条件语句浓缩成一行代码。

复制代码
传统方法:
numbers = [1, 2, 3, 4, 5]
squared_numbers = []
for num in numbers:
    squared_numbers.append(num ** 2)
print(squared_numbers)  
# 输出: [1, 4, 9, 16, 25]

列表推导式:


numbers = [1, 2, 3, 4, 5]
squared_numbers = [num ** 2 for num in numbers]
print(squared_numbers)  
# 输出: [1, 4, 9, 16, 25]

解析:

  • 列表推导式使用方括号 \[\] 来创建新的列表。

  • 在方括号内,首先定义表达式 num ** 2,它表示对每个元素进行的操作。

  • 接着是 for num in numbers,它表示迭代 numbers 列表中的每个元素。

优势:

  • 代码简洁: 将多行代码压缩成一行,提高代码可读性。

  • 性能提升: 列表推导式通常比传统的循环方式更快,尤其是在处理大型数据集时。

2. 生成器表达式:优化内存的迭代器

生成器表达式与列表推导式类似,但它创建的是一个迭代器,而不是一个完整的列表。这意味着它不会一次性将所有元素加载到内存中,而是在需要时逐个生成元素,从而显著节省内存。

复制代码
列表推导式:
squared_numbers = [num ** 2 for num in range(1, 6)]  # 创建一个包含所有平方数的列表
print(squared_numbers)  
# 输出: [1, 4, 9, 16, 25]

生成器表达式:
squared_numbers = (num ** 2 for num in range(1, 6))  # 创建一个生成平方数的迭代器
print(squared_numbers)  
# 输出: <generator object <genexpr> at 0x...>

for num in squared_numbers:  
# 逐个访问迭代器中的元素
    print(num)  
    # 输出: 1 4 9 16 25

解析:

  • 生成器表达式使用圆括号 () 来创建。

  • 其语法与列表推导式相同,只是使用圆括号代替方括号。

优势:

  • 内存高效: 对于大型数据集,生成器表达式可以显著减少内存占用,因为它只在需要时生成元素。

  • 惰性求值: 元素是在需要时才计算的,而不是预先计算好存储在内存中,这在处理包含复杂计算的序列时非常有用。

3. enumerate() 函数:遍历索引和元素

enumerate() 函数用于同时获取可迭代对象中的元素及其索引。

复制代码
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
    print(f"索引:{index},水果:{fruit}")

输出:
复制代码
索引:0,水果:apple
索引:1,水果:banana
索引:2,水果:cherry

解析:

  • enumerate(fruits) 返回一个迭代器,该迭代器生成由索引和元素组成的元组。

  • 在循环中,可以使用 index 和 fruit 变量分别访问索引和元素。

优势:

  • 简化代码: 无需手动维护计数器来跟踪索引。

4. join() 方法:高效拼接字符串

join() 方法用于将一个可迭代对象中的字符串元素拼接成一个新的字符串。

复制代码
fruits = ['apple', 'banana', 'cherry']
combined_fruits = ', '.join(fruits)
print(combined_fruits)  
# 输出:apple, banana, cherry

解析:

  • ', '.join(fruits) 使用 , 作为分隔符连接 fruits 列表中的元素。

优势:

  • 效率高: 比使用 + 运算符拼接字符串更高效,尤其是在处理大型字符串或进行多次拼接操作时。

  • 代码清晰: 使代码更易读和理解。

5. zip() 函数:并行迭代多个序列

zip() 函数用于同时遍历多个可迭代对象。

复制代码
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 32, 40]
for name, age in zip(names, ages):
    print(f"姓名:{name},年龄:{age}")

输出:
复制代码
姓名:Alice,年龄:25
姓名:Bob,年龄:32
姓名:Charlie,年龄:40

解析:

  • zip(names, ages) 创建一个迭代器,该迭代器生成由 names 和 ages 列表中对应位置的元素组成的元组。

优势:

  • 简化代码: 无需使用索引手动访问多个序列中的元素。

6. collections.defaultdict:设置字典默认值

collections.defaultdict 是内置字典 dict 的子类,它允许为不存在的键设置默认值。

复制代码
from collections import defaultdict

fruit_counts = defaultdict(int)  
# 使用 int 作为默认值,表示计数
fruits = ['apple', 'banana', 'cherry', 'banana']

for fruit in fruits:
    fruit_counts[fruit] += 1
print(fruit_counts)  
# 输出:defaultdict(<class 'int'>, {'apple': 1, 'banana': 2, 'cherry': 1})

解析:

  • defaultdict(int) 创建一个字典,如果访问的键不存在,则默认值为 0 (int 类型的默认值)。

优势:

  • 简化代码: 无需在访问键之前检查键是否存在。

  • 避免 KeyError: 当访问不存在的键时,不会引发 KeyError 异常。

7. any() 和 all() 函数:检查可迭代对象中的真值

  • any() 函数:如果可迭代对象中至少有一个元素为 True,则返回 True 。

  • all() 函数:如果可迭代对象中所有元素都为 True,则返回 True 。

示例:

复制代码
numbers = [1, 2, 3, 4, 5]
print(any(num > 3 for num in numbers))  
# 输出:True,因为 4 和 5 大于 3
print(all(num > 3 for num in numbers))  
# 输出:False,因为 1、2 和 3 不大于 3

优势:

  • 代码简洁: 可以用更简洁的方式表达逻辑条件。

8. collections.Counter:高效计数

collections.Counter 类用于统计可迭代对象中元素的出现次数。

复制代码
from collections import Counter

fruits = ['apple', 'banana', 'cherry', 'banana']
fruit_counts = Counter(fruits)
print(fruit_counts)  
# 输出:Counter({'banana': 2, 'apple': 1, 'cherry': 1})

优势:

  • 高效计数: 专门用于计数,比使用循环和字典更高效。

  • 方便的操作: 提供方便的方法来获取计数、查找最常见的元素等。

9. with 语句:安全管理资源

with 语句用于简化资源管理,确保资源在使用后正确关闭。

复制代码
with open('file.txt', 'r') as file:
    content = file.read()
# 文件将在 with 语句块结束后自动关闭

优势:

  • 自动关闭资源: 无需手动关闭文件、网络连接等资源。

  • 异常安全: 即使发生异常,也能确保资源被正确关闭。

10. 装饰器:增强函数功能

装饰器是一种函数,它可以用来修改其他函数的行为。

复制代码
def uppercase_decorator(func):
    def wrapper():
        result = func()
        return result.upper()
    return wrapper

@uppercase_decorator
def greet():
    return "hello"

print(greet())  # 输出:HELLO

解析:

  • uppercase_decorator 是一个装饰器函数,它接收一个函数作为参数。

  • wrapper 函数是装饰器函数内部定义的函数,它调用被装饰的函数,并将结果转换为大写。

  • @uppercase_decorator 语法用于将装饰器应用于 greet 函数。

优势:

  • 代码复用: 可以将通用的功能提取到装饰器中,并在多个函数中重复使用。

  • 代码分离: 将与核心逻辑无关的代码(例如日志记录、性能监测等)与核心逻辑分离,提高代码可读性和可维护性。

  • 非侵入式修改: 无需修改被装饰函数的代码,就可以改变其行为。

希望以上详细的解释和示例能够帮助您更好地理解和应用这些 Python 高级技巧。

到这里所有的教程都已经完成了,如果对你有帮助,记得点赞分享支持一下~

相关推荐
AAA@峥22 分钟前
系统化学习 MySQL:数据类型、库表管理、增删改查全解析
数据库·学习·mysql
神明不懂浪漫1 小时前
【第七章】Java中的常用类
java·开发语言·前端·经验分享·笔记
流星白龙8 小时前
【Redis】2.Redis重大版本
数据库·redis·junit
流星白龙8 小时前
【Redis】7.Hash表
数据库·redis·哈希算法
love530love8 小时前
OpenClaw Windows Companion 桌面客户端 连接 LM Studio 完整配置指南
人工智能·windows·python·openclaw
流星白龙8 小时前
【Redis】4.基本全局命令
数据库·redis·缓存
程序喵大人9 小时前
【C++进阶】STL容器与迭代器 - 01 STL 容器先解决元素放在哪里
开发语言·c++·stl
王八八。9 小时前
Navicat 17破解版下载安装教程 附安装激活步骤(2026 最新版)
数据库·navicat
cui_ruicheng9 小时前
Python从入门到实战(十六):多进程编程
开发语言·python
Jelena1577958579210 小时前
电商运营分析数据比价接口实战:多平台价格监控与智能决策系统
java·大数据·数据库