函数内的函数 Python

A function inside a function Python

这个问题之前有人问过,但是我实在看不懂其他对这类问题的解释,所以我在这里重写一下,详细点。在学习的过程中遇到了这种我一点都不熟悉的代码。。我无法理解如何在f()函数中解释这个g()函数!为什么 g() 中 x = 10 和 y = z*w 的代码段不 运行 ?它只打印我给的 y 的值,用 5 调用 f() !

x = 99

def f(y):
    w = x + y
    def g():
        x = 10
        y = z * w
    print y

f(5)

尽管您在函数 f() 中定义了函数 g(),但您从未真正调用过它。您还需要在 f() 函数中调用它。

在Python中,def是一个语句:接受一个函数名,可能是参数,然后是一个缩进的函数体——将它全部编译成一个函数对象,它绑定到给定的def 出现范围内的名称(此处为 f 本地)。

所以你问 "Why the piece of code inside g() where x = 10 and y = z*w does not run" -- 很简单,因为你从不调用 g!

gf 本地的(或者也称为 "nested in f")这一事实与此无关。

无论是本地还是全局,任何时候您 def g 但从未调用 gg 主体中的代码将不会执行。

顺便说一下,这是 Python 与我听说过的所有其他语言一致的细节。如果定义了一个函数(某些语言称之为 "declared")并且 从未 被调用,那么该函数的主体代码永远不会运行。您是否听说过任何其他语言 - 即执行已定义但从未调用的函数的代码体?!

函数 g() 从未在 f(y) 函数内部被调用。为了让您的代码正常工作,它应该看起来像这样。

x = 99

def f(y):
    w = x + y
    def g():
        x = 10
        y = z * w
    g(y) # <---- notice the function call for g().
    print y

f(5)