我有一小段代码可以理解如何返回可以在代码的其他部分中使用的值。在下面我只想返回变量z或值snooze。但它不起作用。请有人帮我理解为什么这不起作用?
import time
def sleepy(reps, snooze):
t = []
for x in range(reps):
x = time.time()
time.sleep(snooze)
y = time.time()
z = y - x
t.append(z)
print 'difference = ', z*1000
print 'total:', (sum(t)/reps) * 1000
return z
sleepy(10, 0.001)
print z # does not like this.
如果我打印贪睡,它也会抱怨。那是为什么?
答案 0 :(得分:8)
z
是sleepy()
函数中的局部变量;它在该功能之外是不可见的。
您的函数确实返回z
的值;分配它:
slept = sleepy(10, 0.001)
print slept
我在这里使用了一个不同的名称来说明slept
是一个不同的变量。
答案 1 :(得分:2)
您不应该尝试打印z
或snooze
,因为它们的范围仅限于函数的定义。执行以下操作时:sleepy(10,0.001)
,然后将值10分配给reps
,将值0.001分配给snooze
。
然后你想要的东西是用这些变量完成的。在此期间,创建了一个名为z
的新变量,其范围在函数的定义中。然后返回此值。一旦执行了最后一条语句,就会删除定义中创建的所有变量。
所以你必须这样做:
a = sleepy(10,0.001)
print a
这将打印a
的值,这是您从函数内部返回的值。
如果您将其声明为全局,也可以打印z,即:
import time
def sleepy(reps, snooze):
t = []
for x in range(reps):
x = time.time()
time.sleep(snooze)
y = time.time()
global z ##notice this line has been changed.
z = y - x
t.append(z)
print 'difference = ', z*1000
print 'total:', (sum(t)/reps) * 1000
现在要返回的值在z
,您可以这样打印:
sleepy(10,0.001)
print z
答案 2 :(得分:1)
当您从正在调用的函数返回某些内容时,语法如下:
p = sleepy(10,0.001)
print p
答案 3 :(得分:1)
z
和snooze
是函数的局部变量。
您需要将函数的结果分配给变量,以便在函数调用后使其可用。
答案 4 :(得分:1)
z是一个局部变量。当你return z
它实际上并没有返回变量z
而是它
返回z
中存在的值,因此您需要将其存储在另一个变量中并打印该变量
或者你可以使用
print sleepy(10, 0.001)