在返回变量时,我不明白这里有什么。为了简单起见,我写了一个非常基本的东西来总结我遇到的问题:
def apples():
dingo = 2
return dingo
def bananas(dingo):
print(dingo)
def main():
apples()
bananas(dingo)
main()
所以我在'apples'函数中创建'dingo'。我回来了。我用它作为'香蕉'的参数。我把它们都称为main,那么为什么我会得到'dingo'未定义的错误?另外,我无法做的事情是将dingo = apples()
放入香蕉功能中。我无法在香蕉功能中解压缩它,因为我想在主要单独调用它们。有没有办法解决这个问题而不解包?
答案 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())
这样可以避免任何临时赋值的返回值