我正在导入一个游戏包,其中包含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'
这周围有吗?谢谢你的帮助
答案 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
个参数。