Python中的指针

0 投票
2 回答
829 浏览
提问于 2025-04-17 18:23

我是一名物理学生,主要使用Python和Matlab编程,现在开始学习C语言,以提高我的模拟性能。

我有个简单的问题:Python里有指针吗?Matlab里有指针吗?如果有的话,我能像在C语言中那样“轻松”使用它们吗?

我知道在Python和Matlab这些高级语言的背后,其实有很多指针在运作。我的问题是:我能在Python或Matlab中像这样明确地使用指针,就像在C语言中那样吗:

int *p;
int someValue = 1;
p = &someValue;
doSomethingForMe = callSomeFunction(p);

我知道这样做可能没有什么意义(对于大多数应用来说)。我只是想学习。

2 个回答

0

在Python中,你可以使用ctypes库来实现指针的功能。还有,你可以通过一些方法在Python中“模拟”指针的概念,就像这个问题中提到的那样。

在Matlab中,也没有指针的概念。

7

你可能会常常听到说,Python 有“名字”,而不是传统意义上的“变量”。而且它也没有“指针”,因为指针这个概念主要是在低级语言中才有意义,比如 C 语言。(所以,如果你在 Python 中使用 C 兼容库,比如 ctypes,你可以得到“指针”。但这些指针只是为了和 C 语言互通用的。)

在 C 语言中,指针通常用来实现的功能,在 Python 中以其他方式存在。比如:

  • 从一个函数返回多个值。在 C 语言中,你可能会写 int foo(int *, int *) 来返回两个整数(可能还会有一个错误代码)。而在 Python 中,你只需使用元组解包:x, y = foo(),在 foo 函数中使用 return x, y
  • 传入大型对象。因为在 Python 中一切都是通过引用传递的,所以你可以安全地传递一个大型对象的引用,而不需要担心它会被复制。
  • 修改输入参数。大部分情况下,你可以通过选择合适的可变输入来实现。例如,你可以将一个列表传入函数,并在函数内部修改这个列表。在 Python 中,由于引用是相同的,输入的列表看起来会被修改:

    def change_list(l):
        l[0] = 3
    my_list = [1,2,3]
    change_list(my_list)
    print(my_list) # prints [3, 2, 3]
    

MATLAB 的变量概念与 Python 不同。在 MATLAB 中,变量是一个具有某些维度的矩阵。写 x = y 实际上是将 y 复制到 x 中(并适当地设置 x 的维度)。MATLAB 内部会进行优化,避免在不必要的情况下实际复制数据,但对程序员来说,xy 看起来像是两个独立的矩阵。

MATLAB 也没有指针,除非你在处理编译的 MEX 扩展(这些扩展是用其他语言如 C 编写的)。和 Python 一样,MATLAB 也有一些机制可以在不需要指针的情况下传递数据(例如多个输入和输出参数)。

撰写回答