Python函数系列之嵌套及闭包(二)

发布时间:2020-06-27 09:55:03 作者:zjdevops
来源:网络 阅读:525

在Python编程语言中,在函数体内创建另外一个函数(对象,因为Python一切皆对象,函数其实也是对象)是完全合法的,这种函数叫做内部/嵌套函数。

例子:

# coding : utf-8
def outer():
    def inner():
        print("is Inner Method")
    print("Is outer Method")
    inner()

#调用outer函数
outer()
#调用outer()的内部函数,报错
# inner()

运行结果:

Is outer Method
is Inner Method

    inner()   #调用inner()时,出现如下错误
NameError: name 'inner' is not defined

何为闭包?

 如果在一个内部函数里,对在外部作用域(不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)

 说的明了一点就是:在内部函数中,引用了外部函数的自由变量

闭包的作用:

闭包有两种调用方式:

  1. 在内部直接调用

  2. 返回函数名称

e.g

 1.在内部直接调用

# -*- coding: utf-8 -*-

def outer(name):
    def inner(name):
        # name = "Mr.Zhang"  #这里的name值会覆盖调用outer函数实参的值,这是涉及变量在函数作用域的范围
        print("sub method :%s" %name)
        # 使用__closuer__内置属性来判断是否是一个闭包,返回地址,则是,返回None,则不是闭包函数
        print(inner.__closure__)
    inner(name)  #在内部直接调用
outer("GuiDo")

运行结果:

sub method :GuiDo
(<cell at 0x000001D2792EF7C8: function object at 0x000001D2793687B8>,)

e.g

2.返回函数名称

# -*- coding: utf-8 -*-

def sumer(num = 0):
    count = [num]
    def add():
        count[0] += 1
        return count[0]
    return add

f  = sumer(3)
print(f())
print(f())
print(f())

运行结果:

4
5
6


推荐阅读:
  1. Python 语法之闭包
  2. Python函数系列之装饰器(三)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python嵌套函数 闭包 列之

上一篇:Cacti Error:'145“解决

下一篇:Oracle的基本操作-解除用户,赋予权限

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》