Python - 函数名称导入

时间:2013-12-16 01:51:57

标签: python

我正在导入一个游戏包,其中包含moveUp(),moveDown(),moveLeft()和moveRight()等功能。我正在尝试创建一个函数,将任何这些命令循环到指定的数字。

我目前正在使用以下代码:

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'

这周围有吗?谢谢你的帮助

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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)

当然,此时我甚至可能更改整个设计,以便world有一个move方法,该方法需要direction个参数。