函数的嵌套情况会很绕,一定要看清楚,是变量、方法名、还是参数等。
"""
一定要清楚python的函数执行顺序,题目如下,运行结果会是什么:
"""
# def function1():
# num = 1
# def function2():
# num = 2
# print(num)
# print(num)
# function2()
# print(num)
# function1()
下面返回了一个方法名,尤其要注意这种情况。
注:内部函数调用外部函数的变量(非全局变量),则称内部函数为闭包
调用一个函数,返回来另一个新的函数,返回的函数叫做闭包
"""
这种情况下,要理清函数返回的到底是什么
"""
def outer(num1):
def inner(num2):
return num1+num2
return inner #此处返回的inner 是一个函数名,注意不是字符串。而且还并没有调用
res = outer(20)
result = res(10)#到这一步的时候,res的值就是inner,所以 res(10) = inner(10)
print(result) #最后打印的结果就是30
#以上的调用方式还有更简单的写法:
print(outer(20)(10))#就是在已经调用的基础上,继续调用inner函数,结果就是30
注:闭包函数引用外部函数局部变量的前提是,内部函数不能和外部函数的变量重名。
def outer(a):
def inner():
a = a+1 #此处的a虽然是引用的外部变量,且下面的return也可以看出是闭包函数,但是,a = 是重
#新定义了一个新的变量,与外部函数的参数重名。不能这样使用
return a
return inner
#再去调用inner函数的时候,控制台会报错。