python指针函数 python 函数指针

python有没有指针如果您曾经使用过C或C ++等低级语言,那么您可能已经听说过指针 。指针允许您在部分代码中创建高效率 。它们也会给初学者带来困惑,并且可能导致各种内存管理错误,即使对于专家也是如此 。那么在Python中有指针python指针函数的存在吗?
指针广泛用于C和C ++ 。本质上,它们是保存另一个变量的内存地址的变量 。有关指针的更新 , 可以考虑在C指针上查看此概述 。
为什么Python没有指针?
实际上指针为何不存在的原因现在还不知道,也许指针违背python指针函数了Python的禅宗 。指针鼓励隐含的变化而不是明确的变化 。但通常情况下,它们很复杂而不是很简单,特别是对于初学者 。更糟糕的是 , 当python指针函数他们用指针指向自己的方法,或做一些非常危险的事情 , 比如从你无法获取的的一些变量中读取数据 。
Python更倾向于尝试从用户那里抽象出内存地址来实现具体细节,所以Python通常关注可用性而不是速度 。因此 , Python中的指针并没有多大意义 。但是在有些情况下,Python会为您提供使用指针的一些好处 。
想要理解Python中的指针,需要理解Python实现指针功能的具体细节 。简单来说,需要了解这些知识点python指针函数:
不可变对象和可变对象【Python中的对象】
Python变量/名称【Python中的变量】
【在Python中模拟实现指针】
python ctypes 怎么处理函数返回的一般指针test.c(动态库源代码)
[cpp] view plain copy
// 编译生成动态库: gcc -g -fPIC -shared -o libtest.so test.c
#include stdio.h
#include string.h
#include stdlib.h
typedef struct StructPointerTest
{
char name[20];
int age;
}StructPointerTest, *StructPointer;
StructPointer test()// 返回结构体指针
{
StructPointer p = (StructPointer)malloc(sizeof(StructPointerTest));
strcpy(p-name, "Joe");
p-age = 20;
return p;
}
编译:gcc -g -fPIC -shared -o libtest.so test.c
call.py(python调用C语言生成的动态库):
[python] view plain copy
#!/bin/env python
# coding=UTF-8
from ctypes import *
#python中结构体定义
class StructPointer(Structure):
_fields_ = [("name", c_char * 20), ("age", c_int)]
if __name__ == "__main__":
lib = cdll.LoadLibrary("./libtest.so")
lib.test.restype = POINTER(StructPointer)
p = lib.test()
print "%s: %d" %(p.contents.name, p.contents.age)
最后运行结果:
[plain] view plain copy
[zcm@c_py #112]$make clean
rm -f *.o libtest.so
[zcm@c_py #113]$make
gcc -g -fPIC -shared -o libtest.so test.c
[zcm@c_py #114]$./call.py
Joe: 20
[zcm@c_py #115]$
python中,能对函数传递文件指针类型的参数吗如果你用C给Matlab写过MEX程序,那么这个问题是很容易理解的(好像每次讨论Python问题时我总是把Matlab搬了出来…… 《在Matlab中把struct当成Python中的Dictionary使用》《Matlab和Python的几种数据类型的比较》) 。
既然提到了MEX,就简单说一下:
一个Matlab可能形如
function ret=add3(a,b,c)
如果在C的层面实现这个函数,就会看到另一种景象:
void mexFunction(int nlhs,mxArray * plhs[],int nrhs,const mxArray * prhs[])
a,b,c三个参数的地址放在一个指针数组里,然后把这个指针数组的首地址作为参数prhs传递给函数,这说明Matlab函数的参数是传递指针的,而不是值传递 。
纵然是传递的指针 , 但是却不能在函数里改变实参的值,因为标记为“const”了 。
Python是开放源码的,我没有看 。所以下面很多东西是猜的 。

推荐阅读