2013-12-16 63 views
0

我正在使用moveUp(),moveDown(),moveLeft()和moveRight()等函数导入游戏包。我正在尝试创建一个函数,它可以将任何这些命令循环到指定的编号。Python - 函数名称导入

我目前使用下面的代码:

def moveUpLoop(loopNo): 
    for i in range(0, loopNo): 
     world.moveUp() 

def moveDownLoop(loopNo): 
    for i in range(0, loopNo): 
     world.moveDown() 

def moveLeftLoop(loopNo): 
    for i in range(0, loopNo): 
     world.moveLeft() 

def moveRightLoop(loopNo): 
    for i in range(0, loopNo): 
     world.moveRight() 

不过,我想使用类似以下内容:

def functionLoop(funcName, loopNo): 
    for i in range(0, loopNo): 
     world.funcName() 

functionLoop(moveRight, 5) 

当我尝试这样做,我得到这个错误:

NameError:全局名称'moveRight'未定义

是否有anywa在这附近?感谢您的帮助

回答

3
def functionLoop(funcName, loopNo): 
    for i in range(loopNo): 
     getattr(world, funcName)() 

functionLoop('moveRight') 

def functionLoop(func, loopNo): 
    for i in range(loopNo): 
     func() 

functionLoop(world.moveRight) 
0

getattr是你正在寻找的功能。然而,那种模式似乎更适合于词典:

direction_mapping = { 
    "up": world.moveUp, 
    "down": world.moveDown, 
    "left": world.moveLeft, 
    "right": world.moveRight 
} 

def move_loop(direction, loopno): 
    direction_func = direction_mapping[direction] 
    for i in range(loopno): 
     direction_func() 

move_loop("right", 5) 

当然,在这一点上我可能甚至改变了整个设计,使worldmove方法,它接受direction说法。