【问题标题】:A function inside a function Python函数 Python 中的函数
【发布时间】:2015-02-08 22:24:05
【问题描述】:

这是一个以前问过的问题,但我无法真正理解此类问题的其他解释,所以我在这里重新编写更详细的内容。在学习的过程中,我遇到了这种我完全不熟悉的代码..我无法理解如何在 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)

【问题讨论】:

  • g 永远不会被调用。仅仅定义一个函数不会执行任何代码。

标签: python function printing


【解决方案1】:

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

所以你问“为什么 x = 10 和 y = z*w 的 g() 中的那段代码不运行”——很简单,因为你从不调用 g

gf 的本地(或者也称为“嵌套在 f”中)这一事实并不密切。

无论是本地的还是全局的,只要你def g 但从不调用gg 的正文中的代码将不会执行。

顺便说一句,这是 Python 与我听说过的所有其他语言相吻合的一个细节。如果定义了一个函数(某些语言称之为“已声明”)并且从不调用,则该函数的主体代码永远不会运行。你有没有听说过任何其他的语言——即执行一个已定义但从未调用过的函数的代码体?!

【讨论】:

  • 嗯嗯好的!那么'print y'呢?它向我打印 y 的值,但缩进不正确!还是我错了?
  • Ciao Roberto -- print y 完全像 def 语句一样缩进,所以它作为 f 主体的一部分在它之后执行(因为 f 确实 被调用)。如果您意味着 print 成为g 正文的一部分,则缩进是“不正确的”,但Python 不会也无法阅读您的想法,了解您的意思与您的意思非常清楚地 -- 它按照你明确告诉它去做的事情,而不是你打算做的任何不同(在这方面,Python 与任何其他计算机几乎相同)程序:-)
  • 妈呀,piacere mio!请记住接受(单击您决定接受的答案左侧的复选标记大纲),以便 Stackoverflow 知道此问答已完成/满意。
【解决方案2】:

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

【讨论】:

  • 我尝试在 print y 之前调用 g() !缩进为 'print y' 它给了我 0 !我要疯了,真的看不懂
  • 好吧,你在g() 函数中有一个z,我不知道它来自哪里。但不管这一点,你只在g()的范围内改变y。如果你以后想对y 做一些事情,你需要返回这个值并用它做一些事情。
【解决方案3】:

函数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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    相关资源
    最近更新 更多