总结
豆包 AI 助手文章总结

Python中闭包的简单介绍(附示例)

不言
发布: 2018-10-10 15:45:15
转载
2892人浏览过

本篇文章给大家带来的内容是关于python中闭包的简单介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一:简介
   函数式编程不是程序必须要的,但是对于简化程序有很重要的作用。
   Python中一切都是对象,函数也是对象

   a = 1
    a = 'str'
    a = func
登录后复制

二:闭包

闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+环境变量)
如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure),这个是最直白的解释!而且这个变量的值不会被模块中相同的变量值所修改!

三:闭包的作用

立即学习Python免费学习笔记(深入)”;

少使用全局变量,闭包可以避免使用全局变量
   可以实现在函数外部调用函数内部的值:
   print(f.__closure__[0].cell_contents)
   # 返回闭包中环境变量的值!
   模块操作是不能实现的!

# ----------------------------------------------#
# 闭包
# ----------------------------------------------#
# 函数内部定义函数
def curve_pre():
    def curve():
        print("抛物线")
        pass
    return curve
# 不能直接调用函数内部的函数
# curve()
func = curve_pre()
func()
def curve_pre1():
    a = 25  # 环境变量a的值在curve1外部

    def curve1(x):
        print("抛物线")
        return a * x ** 2
    return curve1       # 返回了的闭包
f = curve_pre1()
result = f(2)
print(result)
# 当在外部定义变量的时候,结果不会改变
a = 10
print(f(2))
print(f.__closure__)    # 检测函数是不是闭包
print(f.__closure__[0].cell_contents)    # 返回闭包中环境变量的值!
# ----------------------------------------------#
# 闭包的实例
# ----------------------------------------------#
def f1():
    m = 10
    def f2():
        m = 20  # 局部变量
        print("1:", m)  # m = 20
    print("2:", m)      # m = 10
    f2()
    print("3:", m)      # m = 10,臂包里面的值不会影响闭包外面的值
    return f2
f1()
f = f1()
print(f.__closure__)    # 判断是不是闭包

# ----------------------------------------------#
# 闭包解决一个问题
# ----------------------------------------------#
# 在函数内部修改全局变量的值计算某人的累计步数
# 普通方法实现
sum_step = 0


def calc_foot(step=0):
    global sum_step
    sum_step = sum_step + step


while True:
    x_step = input('step_number:')
    if x_step == ' ':   # 输入空格结束输入
        print('total step is ', sum_step)
        break
    calc_foot(int(x_step))
    print(sum_step)

# 闭包方式实现----->少使用全局变量,闭包可以避免


def factory(pos):

    def move(step):
        nonlocal pos    # 修改外部作用域而非全局变量的值
        new_pose = pos + step
        pos = new_pose  # 保存修改后的值
        return pos

    return move


tourist = factory(0)
print(tourist(2))
print(tourist(2))
print(tourist(2))
登录后复制

以上就是Python中闭包的简单介绍(附示例)的详细内容,更多请关注php中文网其它相关文章!

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
相关标签:
来源:博客园网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号