python中使用多个args调用的嵌套函数



这是我们测试的程序,我不明白发生了什么。这个问题被称为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))

最新更新