无法获取返回的值

时间:2018-08-14 06:40:54

标签: python return python-3.6

data=[1,2,3,4,5,6,7,8,10]
def event(data):
    duration=0
    def delta(data):
        first=data[0]
        last=data[8]
        duration =last - first
        print(duration)

        return duration

    def division(duration):
        a=duration/3
        print(a)


    delta(data)
    print(duration)
    division(duration)

event(data)

我的输出是

  

9
  
  0
  
  0.0

值9不会返回为持续时间,而是将其初始化为0,因此无法正确计算除法(持续时间)

我想要的输出是

  

9
  
  9
  
  3

3 个答案:

答案 0 :(得分:1)

要“获取”函数的返回值,您需要立即使用它或对其进行分配(将其绑定到名称)。这里需要分配,因为您两次使用结果。它由=运算符执行。您可以执行以下操作:

duration = delta(data)
print(duration)
division(duration)

请记住,您在duration函数中定义的deltaevent中的函数无关,因为它们位于不同的命名空间中。如果您希望能够从event设置duration的{​​{1}},可以让Python知道您想使用delta访问封闭函数中的某些内容。从nonlocal返回值的一种替代方法是向其添加以下第一行:

delta

话虽如此,这不是推荐的解决方案。如果最好的方法是将名称空间完全分开,然后修复返回值分配。

作为旁注,请考虑将nonlocal duration 重新定义为last。使用Python,您可以使用负索引从列表末尾开始索引。

答案 1 :(得分:0)

您应在delta(data)duration = delta(data)之间编辑一行,因为未存储返回值。

我已经测试了代码,并且可以在修改后使用它。

答案 2 :(得分:0)

问题是delta函数中的描述变量与您使用duration= 0定义的变量不同。在函数内部,它是一个局部变量。因此,要么捕获持续时间的返回值,要么将持续时间用作global变量。另一种方法是将nonlocal duration放在delta函数中

更改

delta(data)
print(duration)
division(duration)

duration=delta(data)
print(duration)
division(duration)