十个好用到爆炸的Python技巧

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 十个好用到爆炸的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 高级技巧。

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

相关文章
|
6月前
|
存储 人工智能 算法
【Python】Yahtzee(掷骰子游戏)模拟程序【独一无二】
【Python】Yahtzee(掷骰子游戏)模拟程序【独一无二】
|
3月前
|
Python
【python】Python成语接龙游戏[1-3难度均有](源码+数据)【独一无二】
【python】Python成语接龙游戏[1-3难度均有](源码+数据)【独一无二】
|
6月前
|
Python
【玩转循环】探索Python中的无限可能性
【玩转循环】探索Python中的无限可能性
|
6月前
|
Python
使用Python模拟掷骰子游戏的技术指南
使用Python模拟掷骰子游戏的技术指南
163 0
|
6月前
|
机器学习/深度学习 Python
Python随机点名
Python随机点名
|
otter Python
【Python】Python 实现猜单词游戏——挑战你的智力和运气!
【Python】Python 实现猜单词游戏——挑战你的智力和运气!
333 0
|
算法 Python
Python|“另类”的1-100求和方法
Python|“另类”的1-100求和方法
77 0
python小玩意——将动态图转数字
python小玩意——将动态图转数字
python小玩意——将动态图转数字
|
SQL 小程序 搜索推荐
【Python】- 实现一个小程序,随机出题、判题、打分功能
最近在学习python,刚好看到一个需求,尝试实现下,题目如下 文章最后面会有完整的代码
679 0
python--模拟掷骰子游戏
通过python模拟掷骰子的游戏
python--模拟掷骰子游戏
下一篇
无影云桌面