重新评估函数以在python中获取新的随机值

时间:2013-12-21 06:26:16

标签: python function class python-3.x

这是我遇到问题的代码(简化以使其更清晰)。这是一个基于文本的游戏,只是为了帮助学习。

class Character(object):
    def __init__(self):
        self.level = 5
        self.moveset = [None,None,None,None] 

    def movesetleveling(self): 
        if self.level > 4:
            self.moveset[0] = Punch(self.level)

def punch(level):
    damagedealt = random.randint(0,5)**level
    return damagedealt

我想知道如何制作self.moveset[0] = Punch()而不是等于此代码块中Punch()的输出。因此,每当我在while循环中运行它时,它将重新评估Punch()的输出,而不是一次评估Punch()并将其分配给self.moveset[0]的第0个索引。

1 个答案:

答案 0 :(得分:1)

您可以将功能指定给self.moveset[0]而不是结果(使用functools.partial()):

from functools import partial

self.moveset[0] = partial(punch, self.level)

然后,在while循环中,只需调用它:

while True:
    new_punch_every_time = self.moveset[0]() #note: parentheses

self.moveset[0]()调用punch函数,level参数设置为self.levelpartial调用时的值)。

它起作用,因为函数,方法是Python中的一等公民。您可以将它们作为参数传递给其他函数,从函数返回,绑定到其他名称,附加到列表等。