Python 同名的参数和函数
在Python任务中,我必须执行以下两个函数:Python 同名的参数和函数,python,Python,在Python任务中,我必须执行以下两个函数: move(board, move) undomove(board, move) 对我来说,使用与函数同名的参数似乎是一种糟糕的做法。我已经联系教授更改了它,但出于好奇,是否可以从undomove内部调用move函数,或者在move上使用递归?在这些函数中,move引用参数 (Python3,如果有必要的话)这里有很多选项,但排除了最简单的选项(重命名move),还有一些其他选项 首先,您可以为函数创建另一个名称,以便在覆盖move时使用该名称:
move(board, move)
undomove(board, move)
对我来说,使用与函数同名的参数似乎是一种糟糕的做法。我已经联系教授更改了它,但出于好奇,是否可以从undomove
内部调用move
函数,或者在move
上使用递归?在这些函数中,move
引用参数
(Python3,如果有必要的话)这里有很多选项,但排除了最简单的选项(重命名
move
),还有一些其他选项
首先,您可以为函数创建另一个名称,以便在覆盖move
时使用该名称:
def move(...):
...
move_ = move
def undomove(..., move):
move_(...)
这是因为Python中的函数与其他任何函数一样都是对象,所以您可以将它们分配给变量
另一种选择是将函数放在类中,使它们位于名称空间中,这意味着您可以通过
self.move()
访问方法,并通过move
访问参数。也就是说,如果您的赋值要求函数是顶级的,那么这不是一个选项。您可以通过调用globals()['move']
从undomove
(或任何其他函数)中访问函数move
。不是很优雅…你可以在移动(该功能)上获得一个手柄,但是它需要一些额外的练习
def move(move):
print(move,"inside move")
def undomove(move):
print (move,"inside undomove")
this_mod =__import__(__name__)
this_mod.move(move)
if __name__ == '__main__':
move(1)
undomove(2)
不过,一般来说,我肯定会避免将局部变量命名为与该函数中需要的函数同名的函数
就风格而言,创建函数defmove(move):…
肯定有点奇怪,它会让不经意的读者认为您正在尝试编写递归函数,所以我绝对不会这么做。当模块范围中已将move
定义为函数时写入undomove(move)
,虽然不太奇怪,但快速一看可能会引起混淆(它是局部变量吗?它是函数吗?),因此我可能也会避免使用该函数。,将函数放在类中只是为了有一个干净的名称空间似乎有点可疑(所有内容都必须声明为@staticmethod
或类似)。@mgilson-True,尽管问题可能更好地通过move类封装,使用perform()
和undo()
方法,但这是一些疯狂的猜测(可能是一个巨大的过度复杂化)。是的,在这种情况下,我同意(+1)我甚至没有想到这里的globals
。比起我的\uuuu import\uuu
解决方案,我更喜欢它,因为它也不是很优雅。