python函数传递指针 python函数传递参数

python如何传递给c++一个结构体指针?前提是swig封在封装python函数传递指针的代码间传递指针python函数传递指针你要确保他们运行在相同python函数传递指针的地址空间里python函数传递指针,还要保证指针指向的内存的生存期是安全的,否则这种思路就是错误的 。实现方法举例如下:
1、定义了C 结构体和函数如下
typedef struct NameAge
{
char name[20];
int age;
}NameAge , *NameAgePointer;
void test(NameAgePointer p)// 接收结构体指针
{
// do something with p...
}
2、python定义结构体如下
#python中结构体定义
class PyStruct():
def __init__(self, name, age):
self.name = name
self.age = age
fred = PyStruct("fred", 5)
3、假设把第1步里的test封装成example模块,python导入example(既然你都会swig了 , 这个过程就不啰嗦了)
import example
example.test(pointer(fred))
以上是基本思路,因为搭建开发环境和过程比较繁杂,没有验证过 , 但是应该没有大问题
python函数调用的参数传递pythonpython函数传递指针的函数参数传递是"引用传递(地址传递)" 。
python中赋值语句python函数传递指针的过程(x = 1):先申请一段内存分配给一个整型对象来存储数据1python函数传递指针,然后让变量x去指向这个对象,实际上就是指向这段内存(这里有点和C语言中python函数传递指针的指针类似) 。
在Python中,会为每个层次生成一个符号表,里层能调用外层中的变量,而外层不能调用里层中的变量 , 并且当外层和里层有同名变量时,外层变量会被里层变量屏蔽掉 。函数调用会为函数局部变量生成一个新的符号表 。
局部变量:作用于该函数内部,一旦函数执行完成 , 该变量就被回收 。
全局变量:它是在函数外部定义的,作用域是整个文件 。全局变量可以直接在函数里面应用,但是如果要在函数内部改变全局变量,必须使用global关键字进行声明 。
注意 :默认值在函数定义作用域被解析
在定义函数时,就已经执行力它的局部变量
python中不可变类型是共享内存地址的:把相同的两个不可变类型数据赋给两个不同变量a,b,a , b在内存中的地址是一样的 。
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是开放源码的,我没有看 。所以下面很多东西是猜的 。
Python在函数的参数传递时用的什么手法?实验一下(使用ActivePython2.5):
首先介绍一个重要的函数:
help(id)
Help on built-in function id in module __builtin__:
id(...)
id(object) - integer
Return the identity of an object.This is guaranteed to be unique among
simultaneously existing objects.(Hint: it's the object's memory address.)
看最后括号里那句:Hint:it's the object's address.(它是对象的地址)

推荐阅读