IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python学习--Day10--进阶--闭包 -> 正文阅读

[Python知识库]Python学习--Day10--进阶--闭包

作者:recommend-item-box-tow

Day10--进阶--闭包

python 一切皆对象: 如 python中一个函数可以作为另外一个函数的参数,传递

🧸闭包:

# 闭包
# 闭包 = 函数 + 环境变量(函数定义时候)
def curve_pre():
    a = 25
    def curve(x):
        #print('This is curve function')
        return a*x*x
    return curve

a = 10
f = curve_pre()     # 此处f是curve()函数
# f()     # This is curve function
print(f(2))  # 100

# 在这里函数curve()和函数curve_pre()形成了闭包, f(2)的值不会受函数curve_pre()外部的变量影响

# 闭包的环境变量  保存位置
print(f.__closure__)    # (<cell at 0x0000015576DA9A98: int object at 0x00007FFFC88A7F40>,)
# 取闭包的参数值
print(f.__closure__[0].cell_contents)   # 25  

🎈闭包的经典误区:

# 一个示例: 此处的f1()不是闭包
def f1():
    a = 10
    def f2():
        # a 此时被python认为是局部变量 ,闭包将不存在
        a = 20
        print('f2()定义', a)  # 20
    print('f1()打印', a)    # 10
    f2()
    print('调用f2()后', a)    # 10

问题:

有一个旅行者,我们要检测其旅行长度
起点x = 0
比如他走3步, result = 3
比如他又走5步, result = 8
比如他走6步, result =14

# 不用闭包解决
origin = 0

def go1(step):
    global origin
    new_pos = origin + step
    origin = new_pos
    return new_pos

print(go1(3))   # 3
print(go1(5))   # 5
print(go1(6))   # 8

# 使用闭包解决
origin = 0

def sum_walk(pos):
    def walk(step):
        nonlocal pos
        new_pos = pos + step
        pos = new_pos
        return new_pos
    return walk

s = sum_walk(origin)
print(s(2))     # 2
print(origin)     # 0
print(s(5))     # 7
print(origin)     # 0
# 由此可见,相比一般函数而言  闭包不会引起全局变量的改变
# 也可以使用 s.__closure__[0].cell_contents验证

闭包知识函数式编程的一种应用

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 18:55:28  更:2022-05-21 18:57:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:47:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码