美文网首页
python闭包学习

python闭包学习

作者: 你就像只铁甲小宝 | 来源:发表于2019-03-14 13:04 被阅读0次
# 闭包本质是一个函数,如意一个内部函数引用了外部作用域中的变量,那么这个函数就被认为是闭包。
# 闭包的作用:使局部变量被外在函数外被访问成为了可能
# 这里我在函数外想访问in_func会报错
def func():
    in_func = 'In Func'
    print(in_func)


# print(in_func)

# 那通常我们是定义全部变量
# 函数可以引用外部的全局变量
out_func = 'Out Func'


def func():
    print(out_func)


func()


# 闭包的话就是不用使用全局变量,外部也能访问到。
def closure_func():  # closure_func函数返回f函数
    in_func = 'In Func'

    # f函数返回in_fuc变量
    def f():
        return in_func

    return f


# 跟上面是对应的,closure_func返回的是一个方法,方法里使我们想要的局部变量
# <function closure_func.<locals>.f at 0x0000027F84C6BBF8>
print(closure_func())
# 获得局部变量
print(closure_func().__closure__[0].cell_contents)
# In Func
print(closure_func()())


# 写一个带有参数的函数
def add_number(x):
    def number(y):
        return x + y

    return number


add_number5 = add_number(5)
# number:15
print(f'number{add_number5(10)}')
# number:105
print(f'number:{add_number5(100)}')


# 注意的地方:
# 修改外部作用域中的局部变量,使用nonlocal 关键字
def f():
    m = 1

    def g():
        # 指明为上一个作用域中的变量
        nonlocal m
        m = 10
        return m

    return g


print(f()())
first = []

# 输出:4,4,4
# 原因:循环执行完后,i变成2后才赋值给函数
for i in range(3):
    def loop():
        return i * 2


    first.append(loop)

for f in first:
    print(f())

first = []


# 0,2,4
# 循环向内部函数传入参数
def loop():
    def f(x):
        return x * 2

    for x in range(3):
        first.append(f(x))
    return first


print(loop())

参考文章


python闭包
python闭包
一步一步教你认识Python闭包
深入浅出python闭包

相关文章

  • python闭包学习

    参考文章 python闭包python闭包一步一步教你认识Python闭包深入浅出python闭包

  • python函数之闭包

    目录 python函数之闭包什么是闭包python中的namespace闭包的条件闭包的优点 python函数之闭...

  • Python 闭包使用注意点

    1 Python 闭包 今天,聊下 python 的闭包。在函数编程中经常用到闭包。 闭包是什么,它是怎么产生的及...

  • Python装饰器

    【写在前面】在学习python装饰器之前呢,先要对python中的闭包函数有一定的理解,附上一篇关于闭包的文章(写...

  • Python—闭包与装饰器

    将之前学习Python的笔记整理记录下来。 闭包 装饰器

  • python学习-闭包问题

    如果试图在一个内部函数里对外部作用域(不包括外部函数的外部作用域)的变量进行引用,内部函数就会被认为是闭包。 对于...

  • python高级之闭包

    python高级之闭包 什么是闭包? 闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结...

  • 学Python的012天

    原创:XIAO油菜花学习进度记录:《零基础入门学习Python》P21:函数:内嵌函数和闭包《Python开发入门...

  • Python 中的闭包

    Python 中的闭包:+ http://python.jobbole.com/82296/

  • python之理解闭包和装饰器

    python之理解闭包和装饰器 1、闭包函数 1.1 python中函数都是对象 结果: 上面定义一个shut函数...

网友评论

      本文标题:python闭包学习

      本文链接:https://www.haomeiwen.com/subject/ddyqmqtx.html