Python扩展内容
阅读本文需要3分钟
① python中yield关键字的使用:
yield
是一个类似return
的关键字,只是这个函数返回的是个生成器- 当你调用这个函数的时候,函数内部的代码并不立马执行 ,这个函数只是返回一个生成器对象
- 当你使用for进行迭代的时候,函数中的代码才会执行
生成器
特点:可迭代;只能读取一次;实时生成数据,不全存在内存中。
def fun(): yield "aaa" yield "bbb" yield "ccc" #返回可迭代对象(生成器) a = fun() print(a) # <generator object fun at 0x10f26e990> #可以将迭代对象转成列表 # b = list(a) # print(b) #['aaa', 'bbb', 'ccc'] #遍历(迭代)输出,注意:只能读取一次 for i in a: print(i) ''' aaa bbb ccc '''
- 案例:
import json #案例一、这是一段过程化代码编写: str= '[{"name":"zhangsan","age":22},{"name":"lisi","age":19},{"name":"wangwu","age":24}]' data = json.loads(str) #解码JSON数据 # 过滤出年龄大于20岁以上的信息,并输出 for item in data: if item['age']>20: #输出数据 print('-' * 20) print(item['name'],":",item['age']) ''' #输出结果: -------------------- zhangsan : 22 -------------------- wangwu : 24 ''' #案例二:代码拆分(将数据的处理封装成函数): def fun1(): str= '[{"name":"zhangsan","age":22},{"name":"lisi","age":19},{"name":"wangwu","age":24}]' data = json.loads(str) #解码JSON数据 #过滤出年龄大于20岁以上的信息,并输出 dlist = [] for item in data: if item['age']>20: #将过滤出来的数据放置到dlist中 print('-' * 20) dlist.append(item) return dlist # 使用(输出数据) for i in fun1(): print(i['name'], ":", i['age']) ''' #输出结果: -------------------- -------------------- wangwu : 24 wangwu : 24 ''' #案例三:代码拆分(使用yield返回生成器): def fun1(): str= '[{"name":"zhangsan","age":22},{"name":"lisi","age":19},{"name":"wangwu","age":24}]' data = json.loads(str) #解码JSON数据 #过滤出年龄大于20岁以上的信息,并输出 for item in data: if item['age']>20: #将过滤出来的数据放置到dlist中 print('-' * 20) yield item # 使用(输出数据) for i in fun1(): print(i['name'], ":", i['age']) ''' #输出结果: -------------------- zhangsan : 22 -------------------- wangwu : 24 '''
② 装饰器的使用:
- python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,
- 使用python装饰器的好处就是在
不用更改原函数的代码前提下给函数增加新的功能
。 - 无参数的装饰器实例
# 无参数的装饰器实例 def deco(dd): def _deco(): print("start....") dd() print("end.....") return _deco @deco def demo(): print("demo()............") if __name__ == "__main__": d = demo d() #demo()
- 输出结果
start.... demo()............ end....
# 带参数的装饰器实例 def deco(func): def _deco(a, b): print("before myfunc() called.") ret = func(a, b) print(" after myfunc() called. result: %s" % ret) return ret return _deco @deco def myfunc(a, b): print(" myfunc(%s,%s) called." % (a, b)) return a + b if __name__ == "__main__": myfunc(1, 2) myfunc(3, 4)
- 输出结果
before myfunc() called. myfunc(1,2) called. after myfunc() called. result: 3 before myfunc() called. myfunc(3,4) called. after myfunc() called. result: 7
岁月有你,惜惜相处