Python与返回变量的混淆

时间:2014-02-09 16:46:07

标签: python function parameters return

在返回变量时,我不明白这里有什么。为了简单起见,我写了一个非常基本的东西来总结我遇到的问题:

def apples():
    dingo = 2
    return dingo

def bananas(dingo):
    print(dingo)

def main():
    apples()
    bananas(dingo)

main()

所以我在'apples'函数中创建'dingo'。我回来了。我用它作为'香蕉'的参数。我把它们都称为main,那么为什么我会得到'dingo'未定义的错误?另外,我无法做的事情是将dingo = apples()放入香蕉功能中。我无法在香蕉功能中解压缩它,因为我想在主要单独调用它们。有没有办法解决这个问题而不解包?

5 个答案:

答案 0 :(得分:2)

您收到该错误是因为您没有将apples()的返回值分配给任何内容,尤其是dingo范围内的名为main()的变量。这可行:

def apples():
    dingo = 2
    return dingo

def bananas(dingo):
    print(dingo)

def main():
    result = apples()
    bananas(result)

main()

注意我是如何命名变量result的 - 它不必与bananas()函数的参数命名相同 - 它只需要用你赋给它的名称传入它到。

def bananas(dingo)基本上意味着:创建一个名为bananas的函数,它只接受一个参数。在bananas()内,请将该参数称为dingo

因此,在您调用bananas()的范围内调用该参数无关紧要。

与苹果相同:你创建一个变量dingo,为它赋值2并返回它 - 实际返回的只是值(2),这取决于你将该结果分配给可能会或可能不会被称为相同的变量。

答案 1 :(得分:0)

你返回的内容应该被分配给某个变量,否则返回的值就会丢失。

我很好奇你没有得到NameError: global name 'dingo' is not defined样本代码吗?

In [38]: def apples():
    ...:     dingo = 2
    ...:     return dingo
    ...: 
    ...: def bananas(dingo):
    ...:     print(dingo)
    ...: 
    ...: def main():
    ...:     dingo=apples()
    ...:     bananas(dingo)
    ...: 
    ...: main()
2

答案 2 :(得分:0)

def apples():
    dingo = 2
    return dingo

def bananas(dingo):
    print(dingo)

def main():
    apples()
    bananas(dingo)

main()

变量dingo是函数定义apples()的局部变量,其范围(生命周期)在函数调用完成后结束。这意味着变量名dingo一旦功能结束,它就没有任何意义。

apples()毫无疑问会返回dingo,但函数bananas()对dingo一无所知,main()也不知道,因为dingo是一个局部变量并且仅限于apples()

例如:

def ret_val():
    var=5
    return var
main()
    x=ret_val
    print x
Output:
5

return语句只返回变量中的值而不是名称中的变量。 所以你应该用以下代码替换代码:

def apples():
    dingo = 2
    return dingo

def bananas(dingo):
    print(dingo)

def main():
    x=apples()#here x will store the value of dingo i.e 2
    bananas(x)#the value of x will be passed

main()

无论何时返回某些内容,return语句都会终止该函数,而不管它在函数代码中的位置(即最后一个语句或中间)

def check(x):
   if (x % 2==0):
      return "even"
   return "odd"

一旦控件转到return语句,那么函数就会结束,而另一个return语句也不会执行。因此返回就像函数的break语句一样,它也会给调用函数赋一个值。

答案 3 :(得分:0)

为了澄清,范围之间的变量名称没有什么特别之处:

接受答案中给出的代码与此相同:

def apples():
    dingo = 2
    return dingo

def bananas(another_name):
    print(another_name)

def main():
    result = apples()
    bananas(result)

main()

您将bananas的参数称为无关紧要。

答案 4 :(得分:0)

main函数定义中,将代码更改为如下所示

def main():  
   bananas(apples())  

这样可以避免任何临时赋值的返回值