victory的博客

长安一片月,万户捣衣声

0%

python | 闭包

闭包

python中的闭包从表现形式上定义(解释)为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).
返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

闭包示例:

# 示例1
def create_pointer(my_string):
    def pointer(n):
        return my_string[n]
    return pointer

pointer = create_pointer('my name is Molly')
pointer(5)

# 示例2
def count():
fs = []
for i in range(1, 4):
    def f():
        # print(id(i))
        return i*i
    fs.append(f)
return fs

f1, f2, f3 = count()

print(f1())
print(f2())
print(f3())

# 返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
def count():
def f(j):
    def g():
        # print(id(j))
        return j*j
    return g
fs = []
for i in range(1, 4):
    fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()
return fs

f1, f2, f3 = count()
print(f1())
print(f2())
print(f3())