具有相同名称的参数和函数

2024-04-24 10:32:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

在我看来,有一个与函数同名的参数是一种不好的做法。我已经联系教授修改了它,但是出于好奇,是否可以从undomove内部调用move函数,或者在{}上使用递归?在这些函数中,move引用参数。在

(Python3,如果重要的话)


Tags: 函数board参数movepython3教授同名undomove
3条回答

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

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

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

def move(...):
   ...

move_ = move

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

这就像Python中的函数和其他函数一样都是对象,所以您可以将它们分配给变量。在

另一个选择是将函数放在一个类中,这样它们就在一个名称空间中——这意味着您以self.move()的身份访问方法,以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)稍微不那么奇怪,但它仍然可能会引起快速浏览时的混乱(它是一个局部变量吗?是功能吗?)所以我可能也会避免这个。在

相关问题 更多 >