Python扩展内容

简介: 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

    岁月有你,惜惜相处

    相关文章
    |
    4月前
    |
    编译器 Linux C语言
    python C语言扩展之简单扩展-使用ctypes访问C代码
    python C语言扩展之简单扩展-使用ctypes访问C代码
    42 0
    |
    10月前
    |
    Python Windows
    Python 扩展 快捷贴士:os模块下的创建目录的方式
    如果子目录创建失败或者已经存在,会抛出一个 OSError 的异常,Windows上Error 183 即为目录已经存在的异常错误。
    76 0
    |
    24天前
    |
    算法 关系型数据库 程序员
    程序员必备技能)基于Python的鼠标与键盘控制实战扩展与源码
    这篇文章是关于如何使用Python的`pyautogui`库来控制鼠标和键盘进行各种操作,包括移动、点击、滚轮控制以及键盘的按键和快捷键输出,并介绍了如何结合图像处理和计算机视觉技术来扩展其应用。
    |
    1月前
    |
    测试技术 程序员 开发者
    探索代码整洁之道:编写可维护和可扩展的Python程序
    【8月更文挑战第3天】在编程的海洋中,我们经常追求的是那些能够高效运行、易于理解和维护的代码。本文将深入探讨如何通过遵循一系列的最佳实践来提升Python代码的整洁度,从而增强其可维护性和可扩展性。我们将通过具体示例,展示如何应用这些原则来编写更优雅、更健壮的Python程序。
    21 0
    |
    3月前
    |
    数据安全/隐私保护 Python
    Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。
    【6月更文挑战第20天】Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。例如,`@simple_decorator` 包装`my_function`,在调用前后添加额外操作。装饰器还能接受参数,如`@logged(&quot;INFO&quot;, &quot;msg&quot;)`,允许动态定制功能。
    28 6
    |
    2月前
    |
    存储 数据可视化 数据处理
    `geopandas`是一个开源项目,它为Python提供了地理空间数据处理的能力。它基于`pandas`库,并扩展了其对地理空间数据(如点、线、多边形等)的支持。`GeoDataFrame`是`geopandas`中的核心数据结构,它类似于`pandas`的`DataFrame`,但包含了一个额外的地理列(通常是`geometry`列),用于存储地理空间数据。
    `geopandas`是一个开源项目,它为Python提供了地理空间数据处理的能力。它基于`pandas`库,并扩展了其对地理空间数据(如点、线、多边形等)的支持。`GeoDataFrame`是`geopandas`中的核心数据结构,它类似于`pandas`的`DataFrame`,但包含了一个额外的地理列(通常是`geometry`列),用于存储地理空间数据。
    |
    3月前
    |
    数据采集 存储 中间件
    Scrapy,作为一款强大的Python网络爬虫框架,凭借其高效、灵活、易扩展的特性,深受开发者的喜爱
    【6月更文挑战第10天】Scrapy是Python的高效爬虫框架,以其异步处理、多线程及中间件机制提升爬取效率。它提供丰富组件和API,支持灵活的数据抓取、清洗、存储,可扩展到各种数据库。通过自定义组件,Scrapy能适应动态网页和应对反爬策略,同时与数据分析库集成进行复杂分析。但需注意遵守法律法规和道德规范,以合法合规的方式进行爬虫开发。随着技术发展,Scrapy在数据收集领域将持续发挥关键作用。
    89 4
    |
    3月前
    |
    文字识别 API C++
    技术好文共享:编写Tesseract的Python扩展
    技术好文共享:编写Tesseract的Python扩展
    25 0
    |
    3月前
    |
    Java C# C++
    Python基础教程(第3版)中文版 第17章 扩展python (笔记)
    Python基础教程(第3版)中文版 第17章 扩展python (笔记)
    |
    4月前
    |
    存储 算法 数据挖掘
    R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达自激过程时间序列
    R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达自激过程时间序列