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工作過 - 我究竟做錯了什麼?
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工作過 - 我究竟做錯了什麼?
正如@Dharmesh說,你需要存儲的c
值,當它出來的random_function()
。
即c = random_function(c)
的原因是:
範圍就是一切。當您在該函數中更改c
的值時,它僅在該函數的範圍內影響c
的值,並且不會在全局上下文中更改其值。
爲了保留從函數內部分配給c
的值,您需要指定c
函數返回的值。
您正在打印全局分配的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)
您有一個名爲'C'這裏有兩個完全獨立的變量 - 地方'random_function()'裏面的變量(實際上是一個參數)和同名的全局變量。這兩者之間絕對沒有連接 - 通過全局'c'作爲'c'參數的值不會產生任何這樣的連接。 – jasonharper
這將在Python 2中完全相同**,儘管由於'/'運算符的不同,'random_function'會返回不同的東西,但是'print(c)'將打印出'0 '在兩個。 –
在函數的開頭聲明'c'是全局的,具有'global c'語句。默認情況下,函數內部創建的變量是本地的。更好的選擇是將返回值明確地分配給外部'c'變量。 – martineau