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
答案 0 :(得分:1)
要“获取”函数的返回值,您需要立即使用它或对其进行分配(将其绑定到名称)。这里需要分配,因为您两次使用结果。它由=
运算符执行。您可以执行以下操作:
duration = delta(data)
print(duration)
division(duration)
请记住,您在duration
函数中定义的delta
与event
中的函数无关,因为它们位于不同的命名空间中。如果您希望能够从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)