python进阶编程

这篇具有很好参考价值的文章主要介绍了python进阶编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

lambda匿名函数

python使用lambda表达式来创建匿名函数

语法

// lambda 参数们:对参数的处理
lambda x : 2 * x
// x 是参数, 2*x 是返回值
​
//使用lambda实现求和
sum = lambda arg1, arg2 : agr1 + arg2
print(sum(10,20))
​
// 将匿名函数封装在一个函数里面,可以用同样的代码来创建多个匿名函数
def myfunc(n):
    return lambda a : a * n
mydoubler myfunc(2)
mytripler myfunc(3)
print(mydoubler(11)) // 2 * 11
print(mytripler(11)) // 3 * 11

lambda函数不能访问自己的参数列表以外或者全局命名空间里面的参数

lambda的主体是一个表达式而不是代码块,仅仅能封装有限的逻辑进去

推导式

【Python】推导式(列表推导式、元组推导式、字典推导式、集合推导式)详解_一个写湿的程序猿的博客-CSDN博客

  • 列表推导式

    [表达式 for 变量 in 列表]
    或者
    [表达式 for 变量 in 列表 if 条件]
    [out_exp_res for out_exp in input_list if condition]
    ​
    // 例子
    l = [1,2,3]
    [print(item) for item in l if item > 1]
  • 字典推导式

    {key_expr:value_expr for value in colletion if conditon}
    key_expr:新key生成表达式,可以是有返回值的函数
    value_expr:新value生成表达式,可以是有返回值的函数
    for value in colletion if conditon:迭代colletion中满足条件的value传入到key_expr:value_expr中
  • 集合推导式

    {expression for item in Sequence if condition}
    expression:新元素生成表达式,可以是有返回值的函数体
    for item in Sequence if condition:将满足条件的Sequence迭代传入expression表达式
  • 元组表达式【生成器表达式】

    元组推导式可以利用range区间,元组,列表,字典和集合等数据类型,快速生成一个满足指定要求的元组

    (expression for item in Sequence if condition)
    expression:新元素生成表达式,可以是有返回值的函数体
    for item in Sequence if condition:将满足条件的Sequence迭代传入expression表达式

enumerate内建函数

enumerate()函数用于将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标

enumerate(sequence,[start=0])

  • sequence为一个序列,迭代器,或者其它支持迭代对象,返回的是一个enumerate对象

  • 通过enumerate对象的遍历,可以获得索引于数据的组合对

    list = ['1','2','3','4']
    for index, value in enumerate(list):
        print(f'第{index},{value}')
    # 结果如下
    第0,1
    第1,2
    第2,3
    第3,4    

迭代器与生成器

  • 迭代器是访问集合元素的一种方式,迭代器特征为:

    1. 是一个可以记住遍历位置的对象

    2. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束,迭代器只能往前而不会后退

    3. 迭代器有两个基本方法:iter()和next(),字符串,列表,元组都可以用于创建迭代器

    4. 迭代器对象可以用for进行遍历,也可以使用next()函数来获取下一个值

    list = ['1','2','3','4']
    ​
    my_iterator = iter(list)
    ​
    while True:
        try:
            element = next(my_iterator)
            print(element)
        except StopIteration:
            # 迭代结束,退出循环
            break
  • 生成器:使用了yield的函数被称为生成器(generator)

    1. 生成器是一个返回迭代器的函数,只能用于迭代操作,简单说生成器就是一个迭代器

    2. 在调用生成器的运行过程中,每次遇到yield式函数都会暂停并保存当前所有信息,返回yield的值。并在下一次执行next()方法时从当前位置继续运行

    3. 调用一个生成器函数,返回的是一个迭代器对象

    # 定义一个生成器函数
    def my_generatpr(n):
        for i in range(n):
            # 使用yield语句返回元素
            yield i * i
    ​
    # 创建一个生成器对象并遍历元素
    for element in my_generatpr(5):
        print(element)

迭代器和生成器的作用:

  • 节约内存:循环过程中,数据不用一次读入,迭代器不会保存所有值。而是在运行中动态的计算出数列的各个值,并将之前的数值扔掉

  • 不依赖索引取值

  • 实现惰性计算:需要时再取值计算

  • 精简代码:使用yield关键字或者生成器表达式可以很方便的生成一个迭代器对象

装饰器

  • 函数装饰器:本质上是一个python函数,可以让其它函数在不需要做任何代码改动的前提下增加额外功能

  • 提供了@符号作为装饰器的语法糖

  • 使用语法糖要求装饰件函数必须retrurn一个对象

    # 定义一个函数装饰器
    def my_decorator(func):
        def wrapper():
            print("Before function call")
            func()
            print("After function call")
        return wrapper()
    ​
    # 使用函数装饰器
    # 原有功能:打印”hello world“
    @my_decorator
    def say_hello():
        print("hello world")
    ​
    #调用函数
    say_hello()
    ​
    # 结果
    TypeError: 'NoneType' object is not callable
    Before function call
    hello world
    After function call
  • 类装饰器

    1. 可以用来改变类的行为,由python类和@符号组成,在python中通常用于实现代码复用,日志记录,性能测试等功能

    ​
    # 定义一个类装饰器
    class MyClassDecorator:
        def __init__(self, cls):
            self.cls = cls
    ​
        def __call__(self, *args, **kwargs):
            new_args = "Dear " + args[0]
            instance = self.cls(new_args, **kwargs)
            return instance
    ​
    # 使用类装饰器
    # 原有功能:打印 hello+名字
    @MyClassDecorator
    class MyClass:
        def __init__(self, name):
            self.name = name
    ​
        def say_hello(self):
            print(f"hello, {self.name}")
    ​
    # 创建实例
    my_object = MyClass("Alice")
    # 调用实例的方法
    my_object.say_hello()
    ​
    # 打印的结果hello,DearAlice
  • 需要注意的是,装饰器本身并不会改变原始代码的功能,而是通过创建一个新的函数来实现对原始函数或者类的修改,因此,在使用装饰器时,需要确保新创建的函数或者类与原始代码有相同的接口或者行为,以免对其它依赖于改代码的程序产生影响。文章来源地址https://www.toymoban.com/news/detail-628036.html

到了这里,关于python进阶编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go 语言并发编程 及 进阶与依赖管理

    协程可以理解为 轻量级线程 ; Go更适 合高并发场景原因 之一: Go语言 一次可以创建上万协成 ; “快速”: 开多个协成 打印。 go func() : 在 函数前加 go 代表 创建协程 ; time.Sleep() : 协程阻塞,使主协程 在 子协程结束前阻塞不退出 ; 乱序输出 说明并行 ; 通过通信共享内

    2024年02月13日
    浏览(44)
  • Python 进阶指南(编程轻松进阶):十五、面向对象编程和类

    原文:http://inventwithpython.com/beyond/chapter15.html OOP 是一种编程语言特性,允许你将变量和函数组合成新的数据类型,称为 类 ,你可以从中创建对象。通过将代码组织成类,可以将一个整体程序分解成更容易理解和调试的小部分。 对于小程序来说,OOP 与其说是增加了组织,不如

    2023年04月09日
    浏览(47)
  • python进阶编程

    lambda匿名函数 python使用lambda表达式来创建匿名函数 语法 lambda函数不能访问自己的参数列表以外或者全局命名空间里面的参数 lambda的主体是一个表达式而不是代码块,仅仅能封装有限的逻辑进去 推导式 【Python】推导式(列表推导式、元组推导式、字典推导式、集合推导式)

    2024年02月14日
    浏览(36)
  • 【Python进阶编程】python编程高手常用的设计模式(持续更新中)

    Python编程高手通常熟练运用各种设计模式,这些设计模式有助于提高代码的可维护性、可扩展性和重用性。 以下是一些Python编程高手常用的设计模式: 确保一个类只有一个实例,并提供全局访问点。适用于需要共享资源或控制特定资源访问的情景。 其他实现单例模式的方法

    2024年01月24日
    浏览(37)
  • Python 进阶指南(编程轻松进阶):十三、性能测量和大 O 算法分析

    原文:http://inventwithpython.com/beyond/chapter13.html 对于大多数小程序来说,性能并不那么重要。我们可能会花一个小时编写一个脚本来自动执行一个只需要几秒钟就能运行的任务。即使需要更长的时间,当我们端着一杯咖啡回到办公桌时,这个项目也可能已经完成了。 有时候花时

    2023年04月09日
    浏览(41)
  • [从零开始学习FPGA编程-32]:进阶篇 - 基本时序电路-D触发器(Verilog语言)

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:  目录 第1章 什么是时序电路 1.1 时序电路 1.2 什么是触发器

    2023年04月08日
    浏览(38)
  • 100天精通Golang(基础入门篇)——第15天:深入解析Go语言中函数的应用:从基础到进阶,助您精通函数编程!(进阶)

    🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批

    2024年02月12日
    浏览(60)
  • Python 进阶指南(编程轻松进阶):三、使用 Black 工具来格式化代码

    原文:http://inventwithpython.com/beyond/chapter3.html 代码格式化是将一组规则应用于源代码,从而使得代码风格能够简洁统一。虽然代码格式对解析程序的计算机来说不重要,但代码格式对于可读性是至关重要的,这是维护代码所必需的条件。如果你的代码对人(无论是你还是同事)

    2023年04月09日
    浏览(93)
  • Python 进阶指南(编程轻松进阶):十二、使用 Git 组织您的代码项目

    原文:http://inventwithpython.com/beyond/chapter12.html 版本控制系统 是记录所有源代码变更的工具,使检索旧版本代码变得容易。把这些工具想象成复杂的 撤销 功能。例如,如果您替换了一个函数,但后来发现您更喜欢旧的函数,那么您可以将代码恢复到原始版本。或者,如果您发

    2023年04月22日
    浏览(43)
  • 【python】16.Python语言进阶

    重要知识点 生成式(推导式)的用法 说明:生成式(推导式)可以用来生成列表、集合和字典。 嵌套的列表的坑 Python Tutor - VISUALIZE CODE AND GET LIVE HELP heapq 模块(堆排序) itertools 模块 collections 模块 常用的工具类: namedtuple :命令元组,它是一个类工厂,接受类型的名称和

    2024年01月17日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包