6

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

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

4

5 回答 5

8

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

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

slept = sleepy(10, 0.001)
print slept

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

于 2013-06-21T13:06:48.873 回答
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

现在要返回的值是 inz并且您可以这样打印它:

sleepy(10,0.001)

print z
于 2013-06-21T13:19:05.443 回答
1

当您从正在调用的函数返回某些内容时,语法如下:

p = sleepy(10,0.001)
print p
于 2013-06-21T13:07:27.757 回答
1

z并且snooze是函数的局部变量。

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

于 2013-06-21T13:07:31.507 回答
1

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

print sleepy(10, 0.001)
于 2013-06-21T13:47:21.793 回答