这是我们测试的程序,我不明白发生了什么。这个问题被称为nested function problem
。
def foo(a):
def bar(b):
def foobar(c):
return a + b + c
return foobar
return bar
a, b, c = map(int,input().split())
res = foo(a)(b)(c)
print(res)
我试过调试这个程序,但不知道它为什么工作。
为什么foo(a)(b)(c)
没有给出错误?
它为什么起作用,它叫什么?
这是一个闭包概念,内部函数能够访问封闭范围的变量。
如果我们不从封闭范围访问任何变量,它们只是具有不同范围的普通函数
def get_add(x):
def add(y):
return x + y
return add
add_function = get_add(10)
print(add_function(5)) # result is 15
Python中的所有东西都是一个对象,函数也是,所以您可以将它们作为参数传递,并返回它们,例如:
def inc(var):
return var + 1
def my_func():
return inc
my_inc = my_func()
print(my_inc) # <function inc at ...>
print(my_inc(1)) # 2
此外,它还接近装饰师的概念:
def log_this(func):
def wrapper(*args, **kwargs):
print('start', str(args))
res = func(*args, **kwargs)
return res
return wrapper
@log_this
def inc(var):
return var + 1
print(inc(10))