特色:app
实例函数
>>> city = ['wuhan','shenzhen','chongqing','huanggang'] >>> city <list_iterator object at 0x101402630> >>> city .__next__() #方法一:使用next方法来使用迭代器 'wuhan' >>> city .__next__() 'shenzhen' >>> city .__next__() 'chongqing' >>> city .__next__() 'huanggang' >>> city .__next__() # 若是容器中没有更多元素了,则抛出StopIteration异常 Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration # 方法二:使用for循环来使用迭代器 it = iter(city) for x in it: print(x)
定义:post
一个包含了yield关键字的函数就是一个生成器,该函数也叫生成器函数。当生成器函数被调用时,在函数体中的代码不会被执行,而会返回一个迭代器。每次请求一个值,就会执行生成器中代码,直到遇到一个yield表达式或return语句。yield表达式表示要生成一个值,return语句表示要中止生成器。换句话说,生成器是由两部分组成,生成器的函数和生成器的迭代器。生成器的函数是用def语句定义的,包含yield部分;生成器的迭代器是这个函数返回的部分。两者合起来叫作生成器。spa
实例一:code
a = [i*i for i in range(1,10)] print(a) # 结果:[1, 4, 9, 16, 25, 36, 49, 64, 81]
实例二:利用生成器自定义range对象
def drange(num): temp = -1 while True: temp = temp + 1 if temp >= num: return else: yield temp
特色:blog
实例一:一个简单装饰器实现计算函数运行的时间utf-8
# -*- coding:utf-8 -*- # @Author : Clint # @File : calculate_time.py import time def cal_time(func): def wrapper(*args, **kwargs): start_time = time.time() x = func(*args, **kwargs) end_time = time.time() print(func.__name__+"的time cost:", end_time-start_time) return x return wrapper @cal_time #语法糖 test=timer(test)
def test_func():
time.sleep(3)
print("fun_test...") # 结果 test_func的time cost:3.000171661376953
实例一:装饰有参函数ci
import time def timer(func): def deco(*args,**kwargs): start_time = time.time() func(*args,**kwargs) stop_time = time.time() print(stop_time-start_time) return deco @timer def test(parameter): time.sleep(3) print("test is running") test("添加参数")