本文共 3914 字,大约阅读时间需要 13 分钟。
装饰器、迭代器、生成器以及内置函数
装饰器是用来装饰函数的一种高级工具,它能够在不改变函数本身的情况下,为函数增加新的功能。装饰器的核心思想是通过在函数调用前后执行特定的代码来扩展函数的行为,而不会改变函数的原始功能和使用方式。例如,通过装饰器可以在函数执行前后记录日志,执行时间统计,或者在函数返回前处理结果等。
迭代器是能够通过for循环取值的对象。任何可以通过for循环遍历的对象都是可迭代的。可迭代对象的核心特征是包含__iter__()方法。迭代器协议是指对象需要实现__iter__()和__next__()方法。迭代器的使用非常高效,特别是在处理大量数据时,迭代器可以避免一次性加载所有数据到内存中,从而节省内存。
生成器是通过函数中包含yield关键字来创建的特殊函数。生成器的特点是惰性运算,即生成器不会在被调用之前就执行函数内部的代码。只有当外部程序使用next()方法或者其他迭代方法时,生成器才会逐步执行内部的代码,并返回相应的值。生成器的主要优点是节省内存,并且在处理大量数据时比普通列表更高效。
内置函数是Python提供的预定义函数,它们为程序员提供了便捷的操作方式。常见的内置函数包括print、len、max、min、range等。这些函数能够简化代码编写,提高程序的效率和可读性。例如,print函数用于输出文本,len函数用于获取对象的长度,range函数用于生成序列等。
以下是对装饰器、迭代器和生成器的详细解释:
示例:
import timedef wrapper(func): def inner(): start = time.time() func() end = time.time() print('执行效率为:', end - start) return inner return inner@wrapperdef func(): print('这是一个函数') time.sleep(0.3)func() 示例:
l = [1, 2, 3]ll = iter(l)for num in ll: print(num)
示例:
def generator_func(): for i in range(5): yield i for j in 'hello': yield jg = generator_func()for i in g: print(i)
示例:
def generator_func(): print('****') yield 1 print('^^^^') yield 2g = generator_func()ret = next(g)print(ret)g.send('alex')print(g.send('lxf')) 示例:
def generator_func(): yield from range(5) yield from 'hello'g = generator_func()for i in g: print(i)
迭代器和生成器的区别迭代器是可迭代的对象,而生成器是特殊的迭代器。生成器内部必须有yield关键字,它能够通过yield关键字控制迭代的过程。
内置函数内置函数是Python中预定义的函数,它们为程序员提供了便捷的操作方式。常用的内置函数包括:
示例:
def recursive_func(n): if n == 0: return print(n) recursive_func(n - 1)recursive_func(5)
示例:
def binary_search(l, num): print(l) if len(l) == 0: print('not has num') return mid_index = len(l) // 2 if num > l[mid_index]: return binary_search(l[mid_index + 1:], num) elif num < l[mid_index]: return binary_search(l[:mid_index], num) else: print('find it') return l[mid_index] l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]binary_search(l, 7) 示例:
add = lambda a, b: a + bprint(add(1, 2))
示例:
import sysfrom itertools import islicedef large_file_iter(): for line in sys.stdin: yield line.strip()iterator = iter(large_file_iter())for line in iterator: print(line)
def lister_file(): with open('userinfo') as f: while True: line = f.readline() if line.strip(): yield line.strip() time.sleep(0.3)g = lister_file()for i in g: print(i) 示例:
l = [[1, 2], [3, 4], [5, 6]]sorted_l = sorted(l, key=lambda x: x[0])print(sorted_l)
print(dir(print))
示例:
def fib_iterative(n): a, b = 0, 1 for _ in range(n): a, b = b, a + b return aprint(fib_iterative(10))
通过实际项目的实践,熟悉这些概念的应用场景和使用方法,将有助于提升编程能力。
转载地址:http://sngfk.baihongyu.com/