8. 函数-闭包、内置函数

qi.hu 2019/9/7 21:59:52

一、函数名​函数名是⼀个变量但它是⼀个特殊的变量与括号配合可以执⾏函数的变量。函数名的内存地址函数名可以赋值给其他变量函数名可以当做函数的参数函数名可以作为函数的返回值二、闭包定义​如果在一个内部函数里,对在外部作用于(但不是在全局作用域)的

一、函数名

​ 函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量。

1. 函数名的内存地址

def func():
    print("呵呵")
    print(func)
结果:
<function func at 0x1101e4ea0>

2. 函数名可以赋值给其他变量

def func():
    print("呵呵")
    print(func)
# 把函数当成⼀个变量赋值给另⼀个变量
a = func
# 函数调⽤ func()
a() 

3. 函数名可以当做函数的参数

def func():
    print("吃了么")
def func2(fn):
    print("我是func2")
    fn() 
    print("我是func2")
# 把函数func当成参数传递给func2的参数fn.
func2(func) 

4. 函数名可以作为函数的返回值

def func_1():
    print("这⾥是函数1")
def func_2():
    print("这⾥是函数2")
    print("这⾥是函数1")
    return func_2
# 执⾏函数1. 函数1返回的是函数2, 这时fn指向的就是上⾯函数2
fn = func_1()
# 执⾏上⾯返回的函数
fn()    

二、闭包

1. 定义

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

​ 闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,闭包是由函数和与其相关的引用环境组合而成的实体。

​ 通俗的讲就是:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。它只不过是个“内层”的函数,由一个名字(变量)来指代,而这个名字(变量)对于“外层”包含它的函数而言,是本地变量。

​ 闭包的主要用途:实现装饰器

2. 闭包运用

  • 闭包函数必须有内嵌函数
  • 内嵌函数需要引用该嵌套函数上一级namespace中的变量
  • 闭包函数必须返回内嵌函数
(1) 普通闭包
def func(a, b):
    def line(x):
        return a * x - b
    return line

line = func(2, 3)
print(line(5))
(2) 修改值闭包
def func(a, b):
    def line(x):
        nonlocal a
        a = 3
        return a * x - b
    return line

line = func(2, 3)
print(line(5))
随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[8. 函数-闭包、内置函数]http://www.zyiz.net/tech/detail-90605.html

上一篇:ES6

下一篇:批量删除LabelImg制作的.xml中的部分标签值(删除.xml的节点值)

赞(0)

共有 条评论 网友评论

验证码: 看不清楚?
    关注微信小程序
    程序员编程王-随时随地学编程

    扫描二维码或查找【程序员编程王】

    可以随时随地学编程啦!

    技术文章导航 更多>
    扫一扫关注最新编程教程