2011-09-22 80 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)