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

时间:2012-09-20 19:20:26

标签: python

在Python作业中,我必须完成以下两个功能:

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

有一个与函数同名的参数对我来说似乎是一个坏习惯。我已经联系过教授来改变它,但出于好奇,可以从move内部调用undomove函数,还是在move上使用递归?在这些函数中,move引用了参数。

(Python 3,如果重要的话)

3 个答案:

答案 0 :(得分: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)已经在模块作用域中定义为函数时写move稍微不那么奇怪,但它仍然可能会在快速浏览时引起混淆(它是一个局部变量吗?它是函数吗?所以我也可能会避开那个。

答案 1 :(得分:2)

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

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

def move(...):
   ...

move_ = move

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

这适用于Python中的函数就像任何其他对象一样 - 所以你可以将它们分配给变量。

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

答案 2 :(得分:2)

您可以通过move(或任何其他功能)中的globals()['move']来调用功能undomove。不是很优雅......