Python 装饰功能
我是一名python初学者,我很难理解函数式编程的简单概念。我根本不明白为什么会调用嵌套函数(见下面的示例)。这很难解释Python 装饰功能,python,Python,我是一名python初学者,我很难理解函数式编程的简单概念。我根本不明白为什么会调用嵌套函数(见下面的示例)。这很难解释 func3 = func1(func2) 这里我用位置参数func2调用func1。一切都很好func1返回一个嵌套函数。但是当我运行代码时,函数nest1已经执行,即使我只调用了func1(我不明白为什么要执行嵌套函数)func1只能在不打印任何内容的情况下返回函数。有人能给我解释一下吗 def func2(): def nest2(): print('
func3 = func1(func2)
这里我用位置参数func2
调用func1
。一切都很好func1
返回一个嵌套函数。但是当我运行代码时,函数nest1
已经执行,即使我只调用了func1
(我不明白为什么要执行嵌套函数)func1
只能在不打印任何内容的情况下返回函数。有人能给我解释一下吗
def func2():
def nest2():
print('Nest2')
nest2()
return nest2
def func1(func):
def nest1():
print('Nest1')
func()
return nest1
func3 = func1(func2)
func3()
如果使用嵌套函数调用简单函数,则不会执行内部函数。见下文:
def new_func():
def inner():
print(1)
return inner
new_func()
在最后一个示例中,您需要调用返回的函数,该函数带有一个额外的
()
:
输出:
1
在最后一个示例中,您需要调用返回的函数,该函数带有一个额外的
()
:
输出:
1
func1()
返回方法nest1
(不执行),因此调用func3=func1(func2)
返回nest1
并将其分配给func3
下一行执行分配给func3
的任何内容,即方法nest1
。换句话说,行func3()
正在执行函数nest1
,并导致文本打印。func1()
返回方法nest1
(不执行),因此调用func3=func1(func2)
返回nest1
,并将其分配给func3
下一行执行分配给func3
的任何内容,即方法nest1
。换句话说,行func3()
正在执行函数nest1
,并导致文本打印
但是当我运行代码时,函数nest1已经执行了,尽管我只调用了func1(我不明白为什么要执行嵌套函数)。Func 1只应在不打印任何内容的情况下返回函数。有人能给我解释一下吗
执行此操作时:
func3 = func1(func2)
将函数func2
传递到函数func1
。在func1
中,您定义了一个调用传入函数的函数nest1
。然后返回此函数并成为func3
的值。func1
唯一要做的就是创建nest1
函数并返回它。调用func3
时,实际上调用了func1
,nest1
中定义的函数
如果使用嵌套函数调用简单函数,则不会执行内部函数
第二个示例未按预期工作的原因是,调用new_func
不会调用internal
,它只创建internal
并返回它。这与上述情况相同。调用func1
并没有调用nest1
,它只是创建了nest1
并返回了它。您必须显式地调用nest1
(func3()
)。同样,您需要显式调用从new_func
返回的函数:
new_func()()
但是当我运行代码时,函数nest1已经执行了,尽管我只调用了func1(我不明白为什么要执行嵌套函数)。Func 1只应在不打印任何内容的情况下返回函数。有人能给我解释一下吗
执行此操作时:
func3 = func1(func2)
将函数func2
传递到函数func1
。在func1
中,您定义了一个调用传入函数的函数nest1
。然后返回此函数并成为func3
的值。func1
唯一要做的就是创建nest1
函数并返回它。调用func3
时,实际上调用了func1
,nest1
中定义的函数
如果使用嵌套函数调用简单函数,则不会执行内部函数
第二个示例未按预期工作的原因是,调用new_func
不会调用internal
,它只创建internal
并返回它。这与上述情况相同。调用func1
并没有调用nest1
,它只是创建了nest1
并返回了它。您必须显式地调用nest1
(func3()
)。同样,您需要显式调用从new_func
返回的函数:
new_func()()
功能2的主体是:
def nest2():
print('Nest2')
nest2()
return nest2
print('Nest1')
def nest2():
print('Nest2')
nest2()
return nest2
所以func1(func2)
的主体是:
def nest2():
print('Nest2')
nest2()
return nest2
print('Nest1')
def nest2():
print('Nest2')
nest2()
return nest2
在
nest1
func2
主体中,用func2
主体替换func
得到的最后一块是:
def nest2():
print('Nest2')
nest2()
return nest2
print('Nest1')
def nest2():
print('Nest2')
nest2()
return nest2
所以func1(func2)
的主体是:
def nest2():
print('Nest2')
nest2()
return nest2
print('Nest1')
def nest2():
print('Nest2')
nest2()
return nest2
最后一部分是将
func
替换为nest1
主体中的func2
func3
和nest1
是同一个对象,您正在调用func3
。是的。我才意识到。。。我这边的问题真愚蠢。。。不过,谢谢!不过,您正在调用nest1
func3
和nest1
是同一个对象,您正在调用func3
。是的。我才意识到。。。我这边的问题真愚蠢。。。不过,谢谢!