Python中的迭代器、装饰器和列表推导式
一直弄不清 Python 里的迭代器、装饰器和列表推导式,特的记录一下。
迭代器
迭代器是一种实现了 __iter__() 和 __next__() 方法的对象。__iter__() 方法返回迭代器自身,而 __next__() 方法返回迭代器的下一个值。当没有更多元素时,__next__() 方法会引发 StopIteration 异常。
迭代器的优势在于它能按需生成元素,而不是一次性生成所有元素,这样能节省内存。许多内置数据类型(像列表、元组、字符串等)都可以转换为迭代器。
示例代码
# 创建一个列表
my_list = [1, 2, 3, 4, 5]
# 将列表转换为迭代器
my_iterator = iter(my_list)
# 使用 next() 函数获取迭代器的下一个值
print(next(my_iterator)) # 输出: 1
print(next(my_iterator)) # 输出: 2
# 使用 for 循环遍历迭代器
for item in my_iterator:
print(item) # 输出: 3, 4, 5
装饰器
装饰器是一种特殊的函数,它能接受一个函数作为参数,并且返回一个新的函数。装饰器可以在不修改原函数代码的情况下,为原函数添加额外的功能,比如日志记录、性能测试、权限验证等。
示例代码
# 定义一个装饰器函数
def my_decorator(func):
def wrapper():
print("在函数执行之前做一些事情")
func()
print("在函数执行之后做一些事情")
return wrapper
# 定义一个普通函数
@my_decorator
def say_hello():
print("Hello!")
# 调用被装饰的函数
say_hello()
在这个例子中,my_decorator 是一个装饰器函数,它接受一个函数 func 作为参数,并返回一个新的函数 wrapper。@my_decorator 语法糖[1]的作用是将 say_hello 函数传递给 my_decorator 进行装饰。
列表推导式
列表推导式是一种简洁的创建列表的方式,它允许你在一行代码里创建列表。列表推导式的语法为 [expression for item in iterable if condition],其中 expression 是要生成的元素,item 是可迭代对象中的元素,iterable 是可迭代对象,if condition 是可选的条件。
示例代码
# 创建一个包含 1 到 10 的平方的列表
squares = [x**2 for x in range(1, 11)]
print(squares) # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 创建一个包含偶数的平方的列表
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares) # 输出: [4, 16, 36, 64, 100]
综上所述,迭代器让你能按需生成元素,装饰器可在不修改原函数代码的情况下为其添加额外功能,列表推导式则提供了一种简洁的创建列表的方式。
语法糖(Syntactic sugar)是指在编程语言中,为了让程序员更方便、更简洁地表达代码逻辑,而对语言的语法进行的一种优化或扩展。它不会增加语言的功能,只是提供了一种更简洁、易读、易用的语法形式,本质上是一种语法包装,让代码看起来更清晰、更优雅,减少代码的冗长和复杂性。
例如 Python 中的列表推导式就是一种语法糖。使用列表推导式可以用一行代码简洁地创建列表,而如果不用列表推导式,可能需要使用循环和条件判断等多行代码来实现相同的功能。还有 Python 的装饰器语法 @decorator_name 也是语法糖,它让函数装饰的代码看起来更加直观和简洁,而不用显式地调用装饰器函数来装饰目标函数。 ↩︎

浙公网安备 33010602011771号