3

在 Python 作业中,我必须执行以下两个函数:

move(board, move)
undomove(board, move)

有一个与函数同名的参数对我来说似乎是一种不好的做法。我已经联系了教授进行更改,但出于好奇,是否可以move从 内部调用该函数undomove,或者在 上使用递归move?在这些函数内部,move指的是参数。

(Python 3,如果重要的话)

4

3 回答 3

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函数有点不那么奇怪,但它仍然可能会引起混淆(它是一个局部变量吗?它是函数吗?)所以我可能也会避免那个.

于 2012-09-20T19:26:13.360 回答
2

这里有许多选项,但排除最简单的(重命名move),还有其他一些选项。

首先,您可以为该函数创建另一个名称,以便在move被覆盖时使用它:

def move(...):
   ...

move_ = move

def undomove(..., move):
   move_(...)

这可以作为 Python 中的函数与任何其他对象一样工作 - 因此您可以将它们分配给变量。

另一种选择是将函数放在一个类中,因此它们位于命名空间中 - 这意味着您访问方法 asself.move()和参数 as move。也就是说,如果您的分配要求函数是顶级的,那不是一个选项。

于 2012-09-20T19:22:59.917 回答
2

您可以通过从内部(或任何其他函数)move调用来访问该函数。不是很优雅...globals()['move']undomove

于 2012-09-20T19:24:53.177 回答