无法从函数返回值

时间:2013-06-21 13:05:13

标签: python python-2.7

我有一小段代码可以理解如何返回可以在代码的其他部分中使用的值。在下面我只想返回变量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.

如果我打印贪睡,它也会抱怨。那是为什么?

5 个答案:

答案 0 :(得分:8)

zsleepy()函数中的局部变量;它在该功能之外是不可见的。

您的函数确实返回z的值;分配它:

slept = sleepy(10, 0.001)
print slept

我在这里使用了一个不同的名称来说明slept是一个不同的变量。

答案 1 :(得分:2)

您不应该尝试打印zsnooze,因为它们的范围仅限于函数的定义。执行以下操作时: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)

zsnooze是函数的局部变量。

您需要将函数的结果分配给变量,以便在函数调用后使其可用。

答案 4 :(得分:1)

z是一个局部变量。当你return z它实际上并没有返回变量z而是它 返回z中存在的值,因此您需要将其存储在另一个变量中并打印该变量
或者你可以使用

print sleepy(10, 0.001)