2017-09-26 38 views
-2

Python中的函数没有返回我期望的值。这里是一个MWE:函数没有运行

a = 6 
b = 18 
c = 0 
def random_function(c): 
    c = b/a 
    return c 

random_function(c) 
print(c) 

我希望这个功能打印3,而是它打印0.我刚刚从2.7更新到3.6,这将在2.7工作过 - 我究竟做错了什么?

+4

您有一个名为'C'这里有两个完全独立的变量 - 地方'random_function()'里面的变量(实际上是一个参数)和同名的全局变量。这两者之间绝对没有连接 - 通过全局'c'作为'c'参数的值不会产生任何这样的连接。 – jasonharper

+1

这将在Python 2中完全相同**,尽管由于'/'运算符的不同,'random_function'会返回不同的东西,但是'print(c)'将打印出'0 '在两个。 –

+0

在函数的开头声明'c'是全局的,具有'global c'语句。默认情况下,函数内部创建的变量是本地的。更好的选择是将返回值明确地分配给外部'c'变量。 – martineau

回答

3

需要存储来自方法的返回值。

a = 6 
b = 18 
c = 0 
def random_function(c): 
    c = b/a 
    return c 

c= random_function(c) 
print(c) 
+0

但解释为什么范围不适合他。 – ifconfig

+2

'Need to ...'assign ... – wwii

+1

您可能应该选择一个不同的名称来分配返回值 - 所以原来的'c'不会*消失*。 – wwii

2

正如@Dharmesh说,你需要存储的c值,当它出来的random_function()

c = random_function(c)

的原因是:

范围就是一切。当您在该函数中更改c的值时,它仅在该函数的范围内影响c的值,并且不会在全局上下文中更改其值。

为了保留从函数内部分配给c的值,您需要指定c函数返回的值。

0

您正在打印全局分配的c值。

a = 6 
b = 18 
c = 0 
def random_function(c): 
    c = b/a 
    return c # -- this variable scope is local 

random_function(c) 
print(c)  #-- prints Global variable 

打印如你预期,你需要改变你的函数调用像下面

print (random_function(c)) 

c = random_function(c) # this will re assign global value of 'c' with function return value 
print(c)