2024-04-24 10:32:09 发布
网友
在Python任务中,我必须执行以下两个函数:
move(board, move) undomove(board, move)
在我看来,有一个与函数同名的参数是一种不好的做法。我已经联系教授修改了它,但是出于好奇,是否可以从undomove内部调用move函数,或者在{}上使用递归?在这些函数中,move引用参数。在
undomove
move
(Python3,如果重要的话)
您可以通过从undomove(或任何其他函数)中调用globals()['move']来访问函数move。不是很优雅。。。在
globals()['move']
这里有许多选项,但是排除最简单的(重命名move),还有一些其他选项。在
首先,您可以为函数创建另一个名称,以便在move被重写时使用:
def move(...): ... move_ = move def undomove(..., move): move_(...)
这就像Python中的函数和其他函数一样都是对象,所以您可以将它们分配给变量。在
另一个选择是将函数放在一个类中,这样它们就在一个名称空间中——这意味着您以self.move()的身份访问方法,以move的形式访问参数。也就是说,如果你的赋值要求函数是顶级的,那不是一个选项。在
self.move()
您可以获得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): ...肯定有点奇怪,而且它会让不经意的读者认为您正在尝试编写递归函数,所以我肯定会避免这种情况。当move已经在模块范围中定义为函数时,编写undomove(move)稍微不那么奇怪,但它仍然可能会引起快速浏览时的混乱(它是一个局部变量吗?是功能吗?)所以我可能也会避免这个。在
def move(move): ...
undomove(move)
您可以通过从
undomove
(或任何其他函数)中调用globals()['move']
来访问函数move
。不是很优雅。。。在这里有许多选项,但是排除最简单的(重命名
move
),还有一些其他选项。在首先,您可以为函数创建另一个名称,以便在
move
被重写时使用:这就像Python中的函数和其他函数一样都是对象,所以您可以将它们分配给变量。在
另一个选择是将函数放在一个类中,这样它们就在一个名称空间中——这意味着您以
self.move()
的身份访问方法,以move
的形式访问参数。也就是说,如果你的赋值要求函数是顶级的,那不是一个选项。在您可以获得
move
(函数)的句柄,但是它需要一些额外的技巧。在不过,通常情况下,我肯定会避免使用与我在该函数中需要的函数同名的局部变量。在
就风格而言,创建一个函数
def move(move): ...
肯定有点奇怪,而且它会让不经意的读者认为您正在尝试编写递归函数,所以我肯定会避免这种情况。当move
已经在模块范围中定义为函数时,编写undomove(move)
稍微不那么奇怪,但它仍然可能会引起快速浏览时的混乱(它是一个局部变量吗?是功能吗?)所以我可能也会避免这个。在相关问题 更多 >
编程相关推荐