Python扩展内容
阅读本文需要3分钟
yield
是一个类似 return
的关键字,只是这个函数返回的是个生成器生成器
特点:可迭代;只能读取一次;实时生成数据,不全存在内存中。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
'''
不用更改原函数的代码前提下给函数增加新的功能
。# 无参数的装饰器实例
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
岁月有你,惜惜相处
发现更多精彩
关注公众号