我在下面做了一个快速的脚本,在遇到更大的自我学习计划的问题后测试一些行为。我使用的是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 - ],然后返回该值,以便它可以传递给另一个函数。但是,我不是要求支持
非常感谢您的时间,非常感谢任何帮助。
答案 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