2017-09-26 71 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)