重命名 Python 函数指针

使用 Python 中的 getattr() 函数使用指针重命名函数

我们有一个名为 functions.py 的文件,其中我们定义了两个名为 square 和 cube 的函数。

我们可以使用几种方法以其他名称访问这些函数。有一个众所周知的概念,即 Python 中的一切都是对象。

众所周知,对象是通过引用调用的。即使 Python 不支持用户定义的指针,我们仍然可以使用以下方法解决这个问题。

我们的第一个方法涉及在 Python 中使用 getattr() 函数。getattr() 是一个内置函数,它返回一个对象的命名属性的值。

它可以与 __import__() 函数 一起使用。__import__() 是另一个内置函数,用于在 Python 代码中导入包、库和模块。

导入后,我们可以通过将 getattr() 函数的返回值分配给新变量来为原始函数分配一个新名称。代码片段演示了这种现象在 Python 中的作用。

pkg = __import__('functions')

func = getattr(pkg, 'cube')

print(func(3))

输出:

27

我们使用 __import__() 函数导入文件 functions.py 并将其值分配给 pkg 对象。

然后我们在 pkg 对象中获取原始 cube() 函数并将其值分配给 func 变量。我们现在可以只使用 func() 函数调用 functions.cube 函数。

最后,我们用 func(3) 打印了 3 的立方。

使用 Python 中的 import 语句使用指针重命名函数

此方法涉及使用 import 语句重命名函数。

import 语句用于在我们的代码中导入包、库或模块。我们可以使用 as 语句和 import 语句来重命名我们的包、库或模块。

使用 import 和 as 语句重命名我们的包的代码片段如下。

from functions import square as sq
print(sq(2))

输出:

4

我们在 functions.py 文件中将 square() 函数导入为 sq

现在,我们可以通过编写 sq() 在当前文件中使用 square() 函数。这种方法非常方便且易于理解。

但是,如果我们想为一个函数使用多个名称,则此方法会失败。下一节中提到的方法解决了这个问题,并提供了一种解决方案,它还可以为一个函数处理多个名称。

使用 Python 中的 package.function 语句使用指针重命名函数

我们的 square() 函数在 functions.py 文件中,我们可以通过首先在当前代码中导入 funcitons.py 文件并编写 function.square() 来引用此函数。

这用作对原始函数的引用。我们可以将其值分配给代码中的任何变量,并使用该变量来调用函数。

下面提供的代码片段使我们能够了解此方法的工作原理。

import functions

sq = functions.square

print(sq(3))

输出:

9

通过将 functions.square 的引用分配给 sq,我们将 functions.square() 函数重命名为 sq()

然后我们使用重命名的 sq() 函数来计算并打印 3 的平方。在为同一个函数分配多个名称时,此方法非常有用。

为此,我们必须将 functions.square 的值分配给多个变量。下面的代码示例向我们展示了如何实现这一点。

import functions

sq = functions.square
sq1 = functions.square
sq2 = functions.square

print(sq(3))
print(sq1(3))
print(sq2(3))

输出:

9
9
9

我们在同一个代码文件中用三个不同的名字调用了同一个 functions.square() 函数。此方法适用于函数的多个名称。

它也可以用于多种功能。这种方法唯一的问题是它有点代码密集,感觉非常冗余。

下一节讨论的方法解决了这个问题。

在 Python 中使用指针和引用字典重命名函数

我们可以使用原始函数的引用字典来为多个原始函数分配多个名称。

这种方法实现起来很简单。我们必须为原始参考分配一个键。

然后,我们可以通过使用带有分配键的字典名称来访问对原始函数的引用。以下代码片段显示了此方法的工作实现。

import functions

functionsdict = {
    "square": functions.square,
    "cube": functions.cube
}
c = functionsdict["cube"]

print(c(3))

输出:

27

我们创建了一个字典,为原始函数的所有引用分配一个键。然后我们使用 functionsdict 字典和相应的键 cube 将 functions.cube 重命名为 c

最后,我们使用 c() 函数来打印 3 的立方。