Python 同名的参数和函数

Python 同名的参数和函数,python,Python,在Python任务中,我必须执行以下两个函数: move(board, move) undomove(board, move) 对我来说,使用与函数同名的参数似乎是一种糟糕的做法。我已经联系教授更改了它,但出于好奇,是否可以从undomove内部调用move函数,或者在move上使用递归?在这些函数中,move引用参数 (Python3,如果有必要的话)这里有很多选项,但排除了最简单的选项(重命名move),还有一些其他选项 首先,您可以为函数创建另一个名称,以便在覆盖move时使用该名称:

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

move(board, move)
undomove(board, move)
对我来说,使用与函数同名的参数似乎是一种糟糕的做法。我已经联系教授更改了它,但出于好奇,是否可以从
undomove
内部调用
move
函数,或者在
move
上使用递归?在这些函数中,
move
引用参数


(Python3,如果有必要的话)

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

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

def move(...):
   ...

move_ = move

def undomove(..., move):
   move_(...)
这是因为Python中的函数与其他任何函数一样都是对象,所以您可以将它们分配给变量


另一种选择是将函数放在类中,使它们位于名称空间中,这意味着您可以通过
self.move()
访问方法,并通过
move
访问参数。也就是说,如果您的赋值要求函数是顶级的,那么这不是一个选项。

您可以通过调用
globals()['move']
undomove
(或任何其他函数)中访问函数
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)
不过,一般来说,我肯定会避免将局部变量命名为与该函数中需要的函数同名的函数


就风格而言,创建函数
defmove(move):…
肯定有点奇怪,它会让不经意的读者认为您正在尝试编写递归函数,所以我绝对不会这么做。当模块范围中已将
move
定义为函数时写入
undomove(move)
,虽然不太奇怪,但快速一看可能会引起混淆(它是局部变量吗?它是函数吗?),因此我可能也会避免使用该函数。

,将函数放在类中只是为了有一个干净的名称空间似乎有点可疑(所有内容都必须声明为
@staticmethod
或类似)。@mgilson-True,尽管问题可能更好地通过move类封装,使用
perform()
undo()
方法,但这是一些疯狂的猜测(可能是一个巨大的过度复杂化)。是的,在这种情况下,我同意(+1)我甚至没有想到这里的
globals
。比起我的
\uuuu import\uuu
解决方案,我更喜欢它,因为它也不是很优雅。