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 をグローバルとして宣言すると、 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
于 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 に答える