【问题标题】:Return doesn't work (python) [duplicate]返回不起作用(python)[重复]
【发布时间】:2015-09-24 14:16:28
【问题描述】:

我在使用 return 语句时遇到了一些问题,我似乎无法弄清楚出了什么问题。昨天它似乎工作正常,但今天似乎没有包含它的功能正常工作。下面是一个例子:

def fpol(x):
    y=x**4
    return(y)

如果我再输入

fpol(4)

我得到了答案 256(如我所料)。如果我然后输入

print(y)

有人告诉我,或者尝试以任何方式使用/查看 y

NameError: name 'y' is not defined

我也尝试过将 return(y) 替换为 return y 。我也可以将 print(y) 插入到原始函数中并且工作正常,所以我知道在函数期间, y 实际上确实有一个值,它只是没有被返回。非常感谢任何帮助。

编辑:我现在已经能够解决返回函数的问题了。感谢所有回复的人。

【问题讨论】:

  • 请发布您的完整代码,但它不起作用,在没有完整上下文的情况下向我们提供 sn-ps 会适得其反
  • 我发布的这部分是我需要查看的全部内容。它纯粹是为了练习而制作的,因此它实际上并不是更广泛代码的一部分。

标签: python return


【解决方案1】:

y 仅在函数fpol 的范围内已知。您应该将结果分配给一个变量,然后才打印它的值:

y = fpol(4)
print(y)

注意这里y是一个不同的变量,它与函数内部的y无关。你可以写:

x = fpol(4)
print(x)

【讨论】:

  • 但是通过返回 y 我们应该能够通过调用 fpol(4) 访问变量吗?有什么合乎逻辑的理由为什么不应该是这种情况?
  • @user2662639 您不返回名称y,而是返回该名称引用的对象。有很多合乎逻辑的原因为什么会出现这种情况!
  • 啊,抱歉我误解了这个问题。是的,这很明显。
【解决方案2】:

我怀疑您正在尝试在函数之外打印(y)。变量 y 在范围内是局部的,仅在 fpol() 中定义。所以你可以在那里打印它。你可以这样做:,

def fpol(x):
    y=x**4
    return(y)

y = fpol(4)
print(y)

但不是:

def fpol(x):
    y=x**4
    return(y)

print(y)

【讨论】:

    【解决方案3】:

    变量y 仅在您声明的函数中可见。要打印fpol(4) 的结果,您可以将返回的值赋给一个新变量:

    returnedValue = fpol(4)
    print(returnedValue)
    

    【讨论】:

      【解决方案4】:

      我猜你需要将函数返回的值存储在一个变量中,然后打印出来:

      y = fpol(4)
      print y
      

      【讨论】:

        【解决方案5】:

        y 超出范围。它仅在您的函数调用范围内,并且由于函数 fpol 已运行并结束,因此范围已随之消失。我们需要分配一个对打印命令可见的变量。为简单起见,让我们重用 y

        y = fpol(4)
        print(y)
        

        python 的关键经验法则是每次缩进时都会开始一个新的作用域!您必须确保您的变量在使用范围内。

        【讨论】:

          【解决方案6】:

          y 是一个变量,其作用域是函数 fpol() 的本地变量。

          它没有在该范围之外定义。

          代码return y 不会使y 在定义它的函数之外可见。它只将y的值作为函数返回值返回给调用者。

          【讨论】:

            【解决方案7】:

            使用您的示例,以下将显示y 的值

            def fpol(x):
                y=x**4
                print(y)      # This will print the value of y
                return(y)
            
            print fpol(4)     # This will print the returned result
            

            但是在你的函数调用之后尝试打印y 将失败并出现未定义的错误,因为变量仅在你的函数内部定义,即它是该函数的本地变量。这通常被称为变量的范围。

            函数一返回,y 就不再存在。

            【讨论】:

              【解决方案8】:

              y 没有在函数之外定义

              你不能打印(y)

              也许你想要

              y = fpol(4)

              打印(y)

              不是很好的编程风格,但你也可以使 y 成为全局变量。那么它会在函数之后可用,但请不要这样做。

              终于可以做到了

              返回 y

              不需要()

              【讨论】:

              • 我为什么要投反对票?全局变量不好,但可能。
              猜你喜欢
              • 2016-04-07
              • 2012-05-18
              • 1970-01-01
              • 2017-08-03
              • 2020-09-23
              • 2014-12-25
              • 2015-04-30
              • 2018-12-22
              • 1970-01-01
              相关资源
              最近更新 更多