Python扩展内容

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

岁月有你,惜惜相处

发现更多精彩

关注公众

本文分享自微信公众号 - Python 知识大全(TuoLaJi522),作者:虎哥们

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 学到了,学到了导入模块还能这么操作

    你想给某个已存在模块中的函数添加装饰器。不过,前提是这个模块已经被导入并 且被使用过。

    Python知识大全
  • Python中字符串、列表、元组、字典之间的相互转换

    Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串

    Python知识大全
  • Python 魔术方法,属性,迭代器

    Python知识大全
  • 1. 读取excel文件的辛酸之旅

    1. 无法安装R包 安装xlsx包时总是报错: unable to access index for repository https://cran.mtu...

    锦小年
  • MongoDB与python交互

    PyMongo是Mongodb的Python接口开发包,是使用python和Mongodb的推荐方式。 官方文档

    周小董
  • 微信年终放大招!小程序再次升级,这个功能超想要!

    昨日,微信迎来了6.6.1新版本,这次主要在小程序上发力。 微信iOS版更新至6.6.1,在新版本的开屏页中,出现了一款小游戏——“跳一跳”。 ? 除了这个“跳...

    企鹅号小编
  • 微信小程序商城成为标配 未来小程序电商渠道应该是什么姿态

    这是蘑菇街、茵曼、享物说在小程序上的“牛刀小试”。如今提起电商,首先映入脑海的未必是万能的淘宝或者京东,拼多多、云集、一条、享物说、女王新款、蘑菇街女装、靠谱好...

    速成应用小程序开发平台
  • 吴恩达最新医学 AI 成果:利用 AI 提高脑动脉瘤检测准确率,显著减少临床医生诊断时间

    吴恩达团队建立了一种基于CTA的颅内动脉瘤自动检测深度学习模型,模型显著提高了临床医生的敏感性,准确性和评估者间可靠性。团队未来的工作是进一步调查这个模型的表现...

    AI掘金志
  • JMeter 逻辑控制之While循环控制器(While Controller)

    While Controller会一直运行,直到条件(Condition)为false

    授客
  • 刻不容缓!小程序商机整理

    作为这段时间以来一直十分火爆的微信小程序,可谓是话题多多。一方面,人们知道小程序背后可以带来巨大的收益,另一方面,小程序的零门槛让人们蜂拥而至,下面虎哥就来给大...

    微宝阁

扫码关注云+社区

领取腾讯云代金券