python中的指针

我是一名物理专业的学生,​​主要是用Python和Matlab编程,现在进入C语言以提高我的模拟性能。

简单的问题:Python中有指针吗? Matlab中有指针吗? 如果是的话,我可以使用与C中类似的“轻松”吗?

我知道在Python和Matlab的高级别背后,有很多指针在起作用。 问题是:我可以在Python或Matlab中明确地使用这个C代码:

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

我知道无论如何都可能没有意义(对于大多数应用程序)。 我只是想学习。

你会经常听到Python有名字 ,而不是传统意义上的“变量”。 它也没有“指针”,因为这样的概念只有在低级别工作时才有意义,比如C语言。(因此,如果你在Python中使用C兼容性库,你可以得到“指针”,比如ctypes但是,这样的指针仅用于与C的互操作性。)

您在C中使用指针的大部分function都以Python中的其他forms出现。 例如:

  • 从函数返回多个值。 在C中,你要做int foo(int *, int *)来返回两个整数(也许是一个错误代码)。 在Python中,只需使用元组解包: x, y = foo()return x, yfoo
  • 传递大物体。 因为无论如何一切都是通过引用传递的,所以你可以安全地将引用传递给一个巨大的对象,而不必复制它。
  • 修改输入参数。 通过选择适当的可变输入,大多数情况都是可能的。 例如,您可以将列表传递给函数并修改函数中的列表。 在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有效地将x = y复制到x (适当地设置x s维度)。 MATLAB内部进行优化以避免实际复制数据,除非必要,但对于程序员来说,似乎xy是单独的矩阵。

除非您正在处理已编译的MEX扩展(使用其他语言编写,如C),否则MATLAB也没有指针。 与Python一样,您可以在不需要指针的情况下传递内容(例如,多个输入和输出参数)。

Python显然可以指向ctypes库。 此外,您可以在Python中模拟指针的概念 ,就像在这个问题中一样。

在Matlab中,你也没有指针。