python3,函数引用传递,闭包

                                   函数引用传递,闭包的使用及特点和思路过程

大家好,今天来和大家主要讲讲闭包的使用。


先和大家讲一下基础知识,这样方便看懂接下来的代码。


函数引用传递

def test1():
    print("--- in test1 func----")

# 调用函数
test1()

# 引用函数
ret = test1

print(id(ret))
print(id(test1))

#通过引用调用函数
ret()

运行结果为:

--- in test1 func----
140212571149040
140212571149040
--- in test1 func----

由上述代码可以知道,函数名只是函数代码空间的一个引用,当函数名赋值给另一个对象的时候,就是引用传递。


闭包

# 外层函数
def func_out(funcout):
    print("---调用外层函数---")
    # 内层函数,在函数内部再定义一个函数,而且内部函数还用到了外部函数的变量,那么将这个函数以及用到的一些外部变量称之为闭包
    def func_in(funcin):
        print("---调用内层函数---")
        return funcout * funcin
    # 返回func_in() 也就是返回闭包结果
    return func_in

# 给func_out()函数中的 funcout 赋值 10
func_out = func_out(10)

# 注意,这里的20,其实是给 func_in()函数的 funcin 赋值
print(func_out(20))

运行结果为:

---调用外层函数---
---调用内层函数---
200

闭包的执行过程:

闭包的特点:

1.嵌套函数

2.外层函数的返回值是内层函数的函数名

3.外层函数要有参数能够被内层函数使用

闭包的优缺点:

优点:节省电脑的资源,提高代码的复用率

缺点:由于闭包引用了外部函数的参数,所以导致外部函数的参数没有及时释放,导致消耗内存。

总结:

函数名只是函数代码的引用,当函数名赋值给一个变量的时候,其实就是引用传递。

闭包就是一个嵌套的函数,在外层函数运行的时候,内层函数才开始被定义,然后将内层函数的引用,传递给函数外的对象

内部函数和使用的外部函数提供的变量构成的整体称为闭包。

 

发布了19 篇原创文章 · 获赞 30 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览