python中的指针

seb*_*seb 0 c python matlab pointers

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

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

我知道在Python和Matlab的高级别背后,有很多指针在起作用.问题是:我可以在Python或Matlab中明确地执行类似C代码的操作:

int *p;
int someValue = 1;
p = &someValue;
doSomethingForMe = callSomeFunction(p);
Run Code Online (Sandbox Code Playgroud)

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

nne*_*neo 7

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

您在C中使用指针的大部分功能都以Python中的其他形式出现.例如:

  • 从函数返回多个值.在C中,您将int foo(int *, int *)返回两个整数(可能是错误代码).在Python中,只需使用元组解包:x, y = foo()with return x, yin foo.
  • 传递大物体.因为无论如何一切都是通过引用,你可以安全地传递对一个巨大的对象的引用,而不必复制它.
  • 修改输入参数.通过选择适当的可变输入,大多数情况都是可能的.例如,您可以将列表传递给函数并修改函数中的列表.在Python中,由于引用相同,输入列表似乎会被修改:

    def change_list(l):
        l[0] = 3
    my_list = [1,2,3]
    change_list(my_list)
    print(my_list) # prints [3, 2, 3]
    
    Run Code Online (Sandbox Code Playgroud)

MATLAB有一个与Python不同的变量概念.在MATLAB中,变量是具有某些维度的矩阵.编写x = y有效拷贝yx(设置xs尺寸适当).除非必要,MATLAB在内部进行优化以避免实际复制数据,但对于程序员来说,它看起来好像是x并且y是单独的矩阵.

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