2013-06-21 27 views
6

Kodun diğer bölümlerinde kullanılabilecek değerlerin nasıl döndürüleceğini anlamak için küçük bir kod parçam var. Aşağıda sadece z değişkenini veya erteleme değerini döndürmek istiyorum. Ama bu çalışmıyor. Lütfen birinin neden işe yaramayacağını anlamasına yardım edebilir misiniz?Bir işlevden bir değer döndürülemiyor

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. 

Erteleme yazdırıyorsam, aynı zamanda grumbles. Neden?

+2

@IcyFlame kullanabileceğiniz baskı: sorularda ** değil ** değişim kodunu yap!Bütün sorun, 'z' döndürülmesi, ancak bir değişkende saklanmamasıdır, bu değişkeni eklemeye devam etmeyin. –

+0

@MartijnPieters, ancak 'z'' for' döngüsünün kapsamı içinde olduğundan dolayı, onu döndürmek için görünmeyeceğini hissederim – manas

+1

@silent_warrior: Hayır, Python yalnızca modüller ve işlevler için yeni bir kapsam oluşturur (listeyle, Dict ve küme anlatımlarının yanı sıra jeneratör ifadeleri ve lambdalar, özel fonksiyon biçimleridir). Bir döngüde atanan değişkenler, bu kapsamın geri kalanında görünür. –

cevap

8

z, sleepy() işlevinizde yerel bir değişkendir; Bu işlevin dışında görünmez.

İşleviniz z değerini döndürür; atayın:

slept = sleepy(10, 0.001) 
print slept 

Ben slept farklı bir değişken olduğunu göstermek için burada farklı bir ad kullanılır. Eğer aradığınız bir fonksiyonu bir şey döndüğünüzde şöyle

+0

_Your işleviniz z_ değerini döndürdüğünüzde, z geçilirken, istenen değere sahip olmayacak mı (y-x)? – manas

+1

@silent_warrior: Sence bunu ne düşünüyorsun? –

1

, sözdizimi:

p = sleepy(10,0.001) 
print p 
1

z ve snooze çalışabilmesi için yerel değişkenlerdir.

İşlev çağrısının ardından işlev çağrısından sonra kullanılabilmesi için işlev sonucunu bir değişkene atamanız gerekir.

2

z veya snooze'u yazdırmaya çalışmamalısınız, çünkü bunlar işlevin tanımıyla sınırlı bir alana sahiptir. Yaptığınız zaman: sleepy(10,0.001) sonra 10 değeri reps'a atanır ve 0.001 değeri snooze'a atanır.

Ve sonra istediğiniz şeyler bu değişkenlerle yapılır. Bu arada fonksiyon tanımının kapsamı içinde z olarak adlandırılan yeni bir değişken oluşturulur. Ve sonra bu değer döndürülür. Ve son ifade yürütüldüğü zaman, tanımın içinde yaratılan tüm değişkenler silinir.

Yani yapmalısınız:

a = sleepy(10,0.001) 

print a 

Bu işlevi içinde döndürülen değerdir a değerini yazdırır. Ayrıca

global olarak ilan eğer z yazdırabilir, yani: Şimdi

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 

değer z içindedir iade edilecek ve siz böylece yazdırabilirsiniz:

sleepy(10,0.001) 

print z 
1

z, return z numaralı yerel bir değişkendir, z değişkenini döndürmez, bunun yerine , z içinde bulunan değeri döndürür, böylece başka bir değişkende saklamanız gerekir.
değişken veya sadece

print sleepy(10, 0.001) 
İlgili konular