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