在 Python 作业中,我必须执行以下两个函数:
move(board, move)
undomove(board, move)
有一个与函数同名的参数对我来说似乎是一种不好的做法。我已经联系了教授进行更改,但出于好奇,是否可以move
从 内部调用该函数undomove
,或者在 上使用递归move
?在这些函数内部,move
指的是参数。
(Python 3,如果重要的话)
在 Python 作业中,我必须执行以下两个函数:
move(board, move)
undomove(board, move)
有一个与函数同名的参数对我来说似乎是一种不好的做法。我已经联系了教授进行更改,但出于好奇,是否可以move
从 内部调用该函数undomove
,或者在 上使用递归move
?在这些函数内部,move
指的是参数。
(Python 3,如果重要的话)
您可以掌握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)
不过,一般来说,我肯定会避免命名一个与我在该函数中需要的函数同名的局部变量。
就风格而言,创建一个函数def move(move): ...
肯定有点奇怪,它会让不经意的读者认为你正在尝试编写一个递归函数,所以我肯定会避免这种情况。undomove(move)
将模块范围中已经定义为函数的 when写成move
函数有点不那么奇怪,但它仍然可能会引起混淆(它是一个局部变量吗?它是函数吗?)所以我可能也会避免那个.
这里有许多选项,但排除最简单的(重命名move
),还有其他一些选项。
首先,您可以为该函数创建另一个名称,以便在move
被覆盖时使用它:
def move(...):
...
move_ = move
def undomove(..., move):
move_(...)
这可以作为 Python 中的函数与任何其他对象一样工作 - 因此您可以将它们分配给变量。
另一种选择是将函数放在一个类中,因此它们位于命名空间中 - 这意味着您访问方法 asself.move()
和参数 as move
。也就是说,如果您的分配要求函数是顶级的,那不是一个选项。
您可以通过从内部(或任何其他函数)move
调用来访问该函数。不是很优雅...globals()['move']
undomove