菜菜的Python学习日记 | Python进阶之装饰器、高阶函数的用法

news/2024/7/16 4:40:56 标签: python, 开发语言, 后端

请添加图片描述
系列索引菜菜的Python学习日记 | Python从入门到入土详解

今天开始学习Python语言进阶部分。

文章目录

    • 函数的使用方式
    • 装饰器
    • 迭代器和生成器

函数的使用方式

  • 高阶函数的用法(filtermap以及它们的替代品)
python">items1 = list(map(lambda x: x ** 2, filter(lambda x: x % 2, range(1, 10))))
items2 = [x ** 2 for x in range(1, 10) if x % 2]
  • globalnonlocal关键字的作用

    global:声明或定义全局变量(要么直接使用现有的全局作用域的变量,要么定义一个变量放到全局作用域)。
    nonlocal:声明使用嵌套作用域的变量(嵌套作用域必须存在该变量,否则报错)。

python">def nonlocal_test():
    count = 0
    def test2():
        nonlocal count
        count += 1
        return count
    return test2
 
val = nonlocal_test()
print(val())
print(val())
print(val())
以上输出为:123

装饰器

参考知乎大佬的文章,讲的很全很详细。

迭代器和生成器

迭代器是实现了迭代器协议的对象。
  • Python中没有像protocolinterface这样的定义协议的关键字。
  • Python中用魔术方法表示协议。
  • __iter____next__魔术方法就是迭代器协议。
python">class Fib(object):
    """迭代器"""
    
    def __init__(self, num):
        self.num = num
        self.a, self.b = 0, 1
        self.idx = 0
   
    def __iter__(self):
        return self

    def __next__(self):
        if self.idx < self.num:
            self.a, self.b = self.b, self.a + self.b
            self.idx += 1
            return self.a
        raise StopIteration()
  • 生成器是语法简化版的迭代器。
python">def fib(num):
    """生成器"""
    a, b = 0, 1
    for _ in range(num):
        a, b = b, a + b
        yield a
  • 生成器进化为协程。
    生成器对象可以使用send()方法发送数据,发送的数据会成为生成器函数中通过yield表达式获得的值。这样,生成器就可以作为协程使用,协程简单的说就是可以相互协作的子程序。
python">def calc_avg():
    """流式计算平均值"""
    total, counter = 0, 0
    avg_value = None
    while True:
        value = yield avg_value
        total, counter = total + value, counter + 1
        avg_value = total / counter

gen = calc_avg()
next(gen)
print(gen.send(10))
print(gen.send(20))
print(gen.send(30))

Python从入门到入土系列持续更新,欢迎点赞收藏关注

上一篇:菜菜的Python学习日记 | Python进阶笔记(生成式、常用算法、函数定义和调用时都加*,有什么作用?)
下一篇:菜菜的Python学习日记 | 一文读懂Python多线程、多进程、异步I/O处理的区别

本人水平有限,文章中不足之处欢迎下方👇评论区批评指正~

如果感觉对你有帮助,点个赞👍 支持一下吧 ~

不定期分享 有趣、有料、有营养内容,欢迎 订阅关注 🤝 我的博客 ,期待在这与你相遇 ~


http://www.niftyadmin.cn/n/1425824.html

相关文章

html 补记

1热点map(可图形化设计出dreamweaver) 2 meta标签 网页过期(expries) <meta http-equiv"expires" content"web,26Feb,1997 08:21:57 GMT"> <meta name"作者" content"pp"> 3.<pre>..</pre> 预格式,是什么样子…

菜菜的刷题日记 | 9.一行代码解题回文数

系列索引&#xff1a;菜菜的刷题日记 | 被LeetCode用Python狂虐的那段日子 菜鸡的刷题之路——2022/1/21 文章目录【题目】【官方思路】【参考代码】【我的代码】【思考】【题目】 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&a…

批量上传--采集 (多个文件夹)

DBOperation.java中的一个方法 public void alluponefile(String filesb, HttpServletRequest request, String typeid, String secondid, String levelid) { DBOperate dbo new DBOperate(); String filesbs filesb.replace("//", "/"); // fil…

get,post传中文时的乱码解决方法

Tomcat 5.0.19 之后&#xff0c;解决中文传递参数时&#xff0c;就必须考虑是使用 GET or POST&#xff0c;两种解决的方式不一样。 如果是使用 GET 的方式传递时&#xff0c;使用 1) 打开tomcat的server.xml文件&#xff0c;找到 <Connector/> 区块&…

菜菜的Python学习日记 | 一文读懂Python多线程、多进程、异步I/O处理的区别

系列索引&#xff1a;菜菜的Python学习日记 | Python从入门到入土详解 文章目录多线程多进程异步处理Python中实现并发编程的三种方案&#xff1a;多线程、多进程和异步I/O。并发编程的好处在于可以提升程序的执行效率以及改善用户体验&#xff1b;坏处在于并发的程序不容易开发…

菜菜的并发编程笔记 |(一)并发编程介绍

系列索引&#xff1a;菜菜的并发编程笔记 | Python并发编程详解&#xff08;持续更新~&#xff09; 文章目录一、思维导图&#x1f575;️‍♀️二、为什么要引入并发编程&#xff1f;三、常见的程序提速方法四、Python对并发编程的支持五、怎么选择多线程、多进程、多协程&…

菜菜的并发编程笔记 |(二)全局解释器锁GIL

系列索引&#xff1a;菜菜的并发编程笔记 | Python并发编程详解&#xff08;持续更新~&#xff09; 文章目录一、思维导图&#x1f575;️‍♀️二、Python速度慢的两大原因三、GIL是什么&#xff1f;四、为什么有GIL的存在&#xff1f;五、怎么规避GIL带来的限制一、思维导图&…