这是我遇到问题的代码(简化以使其更清晰)。这是一个基于文本的游戏,只是为了帮助学习。
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个索引。
答案 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.level
(partial
调用时的值)。
它起作用,因为函数,方法是Python中的一等公民。您可以将它们作为参数传递给其他函数,从函数返回,绑定到其他名称,附加到列表等。