【问题标题】:Python passing arguments - a confused beginnerPython 传递参数 - 一个困惑的初学者
【发布时间】:2016-07-28 13:21:54
【问题描述】:

我在下面制作了一个快速脚本来测试在更大的自学计划中遇到问题后的一些行为。我正在使用 python 2.7.x。

#!/usr/bin/python
def test(arg1):
    y = arg1 * arg1
    print 'Inside the function', y
    return  y

y = int(raw_input('Enter: '))
test(y)
print 'Outside the function', y

输入:6

函数内部 36

函数外6

但是,当代码如下:

#!/usr/bin/python
def test(arg1):
    y = arg1 * arg1
    print 'Inside the function', y
    return  y

y = test(6)
print 'Outside the function', y

函数内部 36

函数外 36

为什么第一个代码 sn-p 提供 36, 6 而 not 36, 36 就像第二种情况一样?您可以为函数返回更改后的值(在本例中为 36)提出什么建议,以便可以将值传递给另一个函数。

对于上下文,我的目标是让用户输入一个值,然后将该值发送给一个函数。我希望该函数对该输入执行一些逻辑,例如测试以确保它满足某个条件:使用字符 [a-zA-z -],然后返回该值,以便可以将其传递给另一个函数。但是,我并不是在寻求支持

非常感谢您的宝贵时间,非常感谢您的帮助。

【问题讨论】:

  • 顺便说一句,Python 不使用结束分号
  • 我不建议使用全局变量,更不用说使用同名的全局+本地变量。键盘上有足够的字母!
  • 在第一个 sn-p 中,您将 y 分配给用户输入的任何内容。然后你在 y 上调用test,但你没有将test 的输出分配给任何东西。所以在函数之外,y 仍然被定义为用户输入的任何内容。在第二个 sn-p 中,您将 y 分配给 test 的输出,即 y 它打印为 36。
  • @Jean-FrançoisFabre 好吧。我只是想弄清楚如何将值从一个函数传递到另一个函数。

标签: python return return-value


【解决方案1】:

案例 #1 解释

#!/usr/bin/python
def test(arg1):
    y = arg1 * arg1
    print 'Inside the function', y
    return  y; # returning 36


y=int(raw_input('Enter: ')) # here y is 6 as you read from user
test(y) # you are passing 6 and which computes y to be 36, though test is returning 36, but it is not stored in any variable (including y). (not re-assigned, so outside the definition/fucntion, y is still 6)
print 'Outside the function', y # so it is still 6

案例 #2 解释

#!/usr/bin/python
def test(arg1):
    y = arg1 * arg1
    print 'Inside the function', y
    return  y; # returning 36


y=test(6) # here you received and stored it in y
print 'Outside the function', y # now y is 36

【讨论】:

    【解决方案2】:

    因为您在第二个示例中通过设置 y = test(6) 更改了 y 的值。在第一个上设置 y = test(y),你会得到相同的结果。

    【讨论】:

      【解决方案3】:

      两个 sn-ps 之间的唯一区别是,在第二个中,您将 y 重新分配给调用函数的结果。这就是你需要做的。

      【讨论】:

        【解决方案4】:

        在第一个代码中,您有一个名为 y 的全局变量,您将其赋值为 6。进入函数时,您创建一个局部变量,也称为y,您将值 6*6=36 分配给该变量。当你离开函数时,你返回这个值,但不要使用它。然后,打印全局 y

        在第二个代码中,将返回值(本地 y = 36)分配给全局值 y,从而使两个打印值相同。

        【讨论】:

          【解决方案5】:

          为什么第一个代码 sn-p 提供 36, 6 而不是像第二种情况那样提供 36, 36?

          因为你定义了一个全新的 y 变量,其值为 36,而函数外的值为 6。

          在第二种情况下,你仍然有两个 y 变量,但靠近底部的那个(几乎说第一个,因为从技术上讲它是先执行的)是方法的返回值

          【讨论】:

            【解决方案6】:

            您没有将test(y) 的结果分配给代码中的变量 y

            y=int(raw_input('Enter: '))
            # y= 6
            # here you need to assign y= test(y)
            test(y)
            # test result is 36, but not saved to y
            print 'Outside the function', y
            # print 6
            

            【讨论】:

              【解决方案7】:

              输出不一样有两个原因: - 范围不同,在您的第一个示例中,您在函数中分配的 y not 与它之外的 y 相同,即使它们具有相同的名称。为了(过度)简化,您可以认为,当您启动一个新函数时,会创建一个全新的内存空间,并且在其中,没有任何东西已经存在(除了导入的模块名称,函数的参数, ...),因此,即使您在函数内部对 y 进行了赋值,它也是一个全新的 y,并且当函数结束时,它的生命就停止了。 - 在第二个示例中,您将函数的输出放入 y 中,在第一个示例中,输出因未使用而丢失。

              为了说明我的第一点:

              #!/usr/bin/python
              def test(arg1):
                  y = arg1 * arg1
                  print 'Inside the function', y
                  return  y;
              test(3)
              print y
              

              这会引发 NameError,因为在函数之外,y 不存在。

              我邀请您阅读并理解这个非常简单的解释Getting Started with Python - Variable scope

              【讨论】:

                猜你喜欢
                • 2013-12-31
                • 1970-01-01
                • 2015-07-30
                • 1970-01-01
                • 1970-01-01
                • 2014-11-25
                • 2016-11-08
                • 1970-01-01
                相关资源
                最近更新 更多