跳转到主内容
极星编程网:以代码为星,赴技术山海!

15个高级Python技巧提高代码效率更加Pythonic

目录使用列表推导式简化代码利用生成器表达式提高内存效率学会使用 enumerate() 函数使用 join() 简化字符串连接利用 zip() 函数进行并行迭代使用 collections.defaultdict 简化字典默认值巧用 any() 和 all() 函数使用 collections.Counter 对元素进行计数用 @staticmethod 和 @classmethod 装饰函数利用 slots 减少内存使用量使用 contextlib.suppress 忽略异常使用列表推导式简化代码列表推导式提供了简洁而优雅的方法。它们通常可以取代传统的循环和条件语句,从而使代码更简洁、更易读。但是这里不建议把列表推导式写的过于复杂,毕竟代码是写给人看的,之后才是让机器阅读的。

# 普通的写法numbers = [1, 2, 3, 4, 5]squared_numbers = []for num in numbers:squared_numbers.append(num ** 2)# 使用列表推导式squared_numbers = [num ** 2 for num in numbers]利用生成器表达式提高内存效率与列表推导式类似,生成器表达式允许你以简洁的方式创建迭代器。主要区别在于,生成器表达式不会在内存中存储整个序列,因此更节省内存。

使用小括号代替方括号创建生成器表达式:# 列表推导式squared_numbers = [num ** 2 for num in numbers]# 生成器表达式squared_numbers = (num ** 2 for num in numbers)学会使用 enumerate() 函数当需要遍历一个可迭代元素并计划使用每个元素的索引时,enumerate()函数就派上用场了。它返回一个包含索引和相应元素的元组迭代器。下面是一个例子:# 列表推导式squared_numbers = [num ** 2 for num in numbers]# 生成器表达式squared_numbers = (num ** 2 for num in numbers)使用 join() 简化字符串连接使用+运算符连接字符串的效率可能会很低,尤其是在处理大字符串或多个字符串连接时。相反,使用 join() 方法可以高效地连接多个字符串,这个方法我个人也经常在用,而且用列表拼接字符串时,编写会更加灵活:fruits = ['apple', 'banana', 'cherry']combined_fruits = ', '.join(fruits) print(combined_fruits)# Output: apple, banana, cherry利用 zip() 函数进行并行迭代通过zip()函数,可以并行遍历多个可遍历数。它将多个迭代作为输入,并返回一个迭代器,该迭代器产生的元组包含来自每个迭代的元素。下面是一个示例:names = ['Alice', 'Bob', 'Charlie']ages = [25, 32, 40]for name, age in zip(names, ages):print(f"Name: {name}, Age: {age}")使用 collections.defaultdict 简化字典默认值collections模块提供了一个名为defaultdict的便捷类,它是内置dict类的子类。如果键值不存在,它会自动为其指定默认值,从而省去了显式检查。下面是一个例子:from collections import defaultdict fruit_counts = defaultdict(int) fruits = ['apple', 'banana', 'cherry', 'banana']for fruit in fruits:fruit_counts[fruit] += 1 print(fruit_counts)# Output: {'apple': 1, 'banana': 2, 'cherry': 1}巧用 any() 和 all() 函数any() 和all()函数在处理可迭代数据结构时非常有用。如果可迭代数据结构中至少有一个元素为True,则any()函数返回True,而all()函数只有在所有元素都为True时才返回True

。下面是一个例子:

numbers = [1, 2, 3, 4, 5]print(any(num > 3 for num in numbers))# Output: True print(all(num > 3 for num in numbers))# Output: False使用 collections.Counter 对元素进行计数collections.Counter类提供了一种方便的方法来对可迭代表中的元素进行计数。它返回一个类似字典的对象,其中元素是键,计数是值。下面是一个示例:from collections import Counter fruits = ['apple', 'banana', 'cherry', 'banana']fruit_counts = Counter(fruits) print(fruit_counts)# Output: Counter({'banana': 2, 'apple': 1, 'cherry': 1})用 @staticmethod 和 @classmethod 装饰函数@staticmethod装饰器允许你在类中定义静态方法。这些方法不能访问实例或类本身,但可以在不实例化对象的情况下调用。同样,@classmethod装饰器定义的方法的第一个参数是类本身,而不是实例。下面是一个例子:class MathUtils:@staticmethod def square(x):return x ** 2@classmethod def cube(cls, x):return x ** 3 print(MathUtils.square(3)) # Output: 9 print(MathUtils.cube(3)) # Output: 27利用 slots 减少内存使用量Python 默认将实例属性存储在字典中,这会消耗大量内存,尤其是在创建许多实例时。然而,您可以使用 slots 属性来告诉 Python 为一组固定的实例变量分配内存,从而减少内存使用量。下面是一个例子:class Point:__slots__ = ['x', 'y']def __init__(self, x, y):self.x = x self.y = y这样就限定了属性只有x和y,如果尝试绑定其他属性便会报AttributeError错误。

使用 contextlib.suppress 忽略异常contextlib.suppress上下文管理器可以方便地忽略代码块中出现的特定异常。它有助于避免不必要的try-except代码块,并保持代码的整洁。下面是一个示例:from contextlib import suppress with suppress(FileNotFoundError):with open('file.txt', 'r') as file:contents = file.read()以上就是15个高级Python技巧提高代码效率更加Pythonic。的详细内容,更多关于Python Pythonic高效代码的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:Python 的 sum() Pythonic 的求和方法详细15个Pythonic的代码示例(值得收藏) Pythonic版二分查找实现过程原理解析给大家整理了19个pythonic的编程习惯(小结) Python中那些 Pythonic的写法详解几种实用的pythonic语法实例代码

相关文章