Python传递参数 - 一个困惑的初学者

时间:2016-07-28 13:21:55

标签: python return return-value

我在下面做了一个快速的脚本,在遇到更大的自我学习计划的问题后测试一些行为。我使用的是python 2.7.x。

xcaccess_type not in (288,289,292)
  

输入:6

     

在功能36内部

     

在功能6之外

但是,当代码如下:

#!/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
  

在功能36内部

     

在功能36之外

为什么第一个代码段提供36,6和 36,36与第二种情况一样?您可以为函数返回更改后的值(在本例中为36)提出哪些建议,以便将值传递给另一个函数。

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

非常感谢您的时间,非常感谢任何帮助。

7 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

  

为什么第一个代码段提供36,6而不是36,36与第二种情况一样?

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

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

答案 5 :(得分:0)

您没有在代码中为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

答案 6 :(得分:0)

输出不同的原因有两个:    - 范围不同,在第一个示例中,您在函数中指定的y 与其外部的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