2011-09-22 100 views
-1

考慮以下僞代碼:重新評估VAR在python

class Atrribute(object): 
    def __init__(self): 
     self.value = 0 
    def get(): 
     self.value = random(10) 

def func(var): 
    lambda var: return var+1 

1) myFunc = func(Attribute().get()) 
2) myFunc() 
3) myFunc() 

現在,當我在第2行調用myFunc的()我從0到10(加1)隨機值是由Attribute中的get()函數生成。問題是,當我在第3行調用myFunc()時,我從第2行得到相同的隨機值。是否有可以讓Python在第3行再次啓動get()函數以產生新的隨機值?

梅厄

+4

該代碼甚至不_close_工作。請重寫爲_working example_。班級名稱拼寫錯誤。除非將其設置爲'staticmethod',否則不能創建'get',除非手動將其傳遞給類的實例,否則無法在該類上調用實例方法。 'func'不返回可調用的,所以'myFunc()'不起作用。 'get'返回'None',這就是你傳遞給'func'的東西 - 你不能添加到'None'。 – agf

+0

get()方法沒有返回任何東西,也沒有被自我傳遞。這是你的實際代碼嗎? –

+0

另外隨機是未定義的(並且不會像明顯的'random.random'那樣操作),您不能在lambda內返回,並且屬性拼寫錯誤。將單詞「code」更改爲「pseudo-code!」 – dbr

回答

0

你的代碼(如果正確寫入和我相信你預期它)只會調用Attribute.get()一次,,在林1。然後將值返回給變量「myFunc的」。

試試這個:

class Atrribute(object): 
   def __init__(self): 
       self.value = 0 
   def get(): 
       self.value = random(10) 

def func(var): 
   return var+1 

1) a = Attribute() 
2) myFunc = a.get 
3) func(myFunc) 
4) func(myFunc) 
3

是的,有:

import random 

class Attribute(object): 
    def __init__(self): 
     self.value = 0 
    def get(self): 
     self.value = random.random() * 10 
     return self.value 

def func(fn): 
    return lambda: fn() + 1 

att = Attribute() 
myFunc = func(att.get) 
print myFunc() 
print myFunc() 

今後,請確保您發佈的任何代碼是語法錯誤,實際上做了你說的話它確實如此。

1

如何:

def myFunc(): 
    return random(10)