闭包与引用

来源:互联网 发布:酒店大数据分析 编辑:程序博客网 时间:2024/06/05 01:57

Tip:非参考书籍,仅一己之见

闭包与高级函数,高级函数里处理闭包数据时,要注意的是,如果高级函数返回的是函数,则该函数里参考的闭包数据仅是引用

例如

def count():    fs = []    for i in range(1,4):        def f():            return i*i        fs.append(f)    return fs

结果都是9

>>> count()[1]()9>>> count()[2]()9>>> 


这个对于f(),f是个不纯的函数,在高级函数设计里尽量以纯函数出现,不像scala变量可以是不变状态的(这对于纯函数非常重要)

我们在举出一个例子

a = 1def count():    fs = []    for i in range(1,4):        def f():            return a*a        fs.append(f)    return fs 

>>> count()[1]()1>>> count()[2]()1>>> a = 2>>> count()[2]()4>>> 

这里可看出一个不变状态对于纯函数有多重要...

0 0
原创粉丝点击