
正文
python函数指针吗 py 指针
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
python中的*args和**kw
python中的 args和 kw:
*args :表示就是将实参中按照位置传值,多余的值都给args,且以 元组 的方式呈现
**kw :表示就是形参中按照关键字传值,多余的值都给kw,且以 字典 *的方式呈现
lambda表达式:
python中的匿名函数,lambda x: x*x
@decorator装饰器:
定义一个函数,可以在运行中动态增加功能又不改动函数本身
python闭包:
fs数组中存储的是三个指向f函数的函数指针,i变量的值在for循环结束后已经赋值为3,所以f1,f2,f3的结果都是9。
fs当前数组中存储的函数指针把for循环i变量的值作为fs内函数指针的参数
相关问答
Q1: python有没有指针
如果您曾经使用过C或C ++等低级语言python函数指针吗,那么您可能已经听说过指针。指针允许您在部分代码中创建高效率。它们也会给初学者带来困惑,并且可能导致各种内存管理错误,即使对于专家也是如此。那么在Python中有指针的存在吗?
指针广泛用于C和C ++。本质上,它们是保存另一个变量的内存地址的变量。有关指针的更新,可以考虑在C指针上查看此概述。
为什么Python没有指针?
实际上指针为何不存在的原因现在还不知道,也许指针违背python函数指针吗了Python的禅宗。指针鼓励隐含的变化而不是明确的变化。但通常情况下,它们很复杂而不是很简单,特别是对于初学者。更糟糕的是,当他们用指针指向自己的方法,或做一些非常危险的事情,比如从你无法获取的的一些变量中读取数据。
Python更倾向于尝试从用户那里抽象出内存地址来实现具体细节,所以Python通常关注可用性而不是速度。因此,Python中的指针并没有多大意义。但是在有些情况下,Python会为您提供使用指针的一些好处。
想要理解Python中的指针,需要理解Python实现指针功能的具体细节。简单来说,需要了解这些知识点:
不可变对象和可变对象【Python中的对象】
Python变量/名称【Python中的变量】
【在Python中模拟实现指针】
Q2: python使用C函数返回的指针
int* GrabImage();
int GetPixel(int* image, int x, int y);
void SetPixel(int* image, int x, int y, int color);
Q3: python中,能对函数传递文件指针类型的参数吗
如果你用C给Matlab写过MEX程序python函数指针吗,那么这个问题是很容易理解的(好像每次讨论Python问题时python函数指针吗我总是把Matlab搬python函数指针吗了出来…… 《在Matlab中把struct当成Python中的Dictionary使用》《Matlab和Python的几种数据类型的比较》)。
既然提到python函数指针吗了MEX,就简单说一下python函数指针吗:
一个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.(它是对象的地址)
有了这个函数,下面的事情就方便多了。
a=0
id(a)
3630228
a=1
id(a)
3630216
可以看出,给a赋一次值,a的address就改变了。在C的层面看,(也许真实情况不是下面的样子,但作为一个类比应该还是可以的):
void * pa;
pa=malloc(sizeof(int));
*(int *)pa=0;
free(pa);
pa=malloc(sizeof(int));
*(int *)pa=1;
Python中每次赋值会改变变量的address,分配新的内存空间,所以Python中对于类型不像C那样严格要求。
下面看看Python函数参数传递时到底传的什么:
有一个函数:
def changeA(a):
... print id(a)
... a=100
... print id(a)
设定一个变量var1:
var1=10
id(var1)
3630108
changeA(var1)
3630108
3631012
var1
10
调用函数后,从两次print的结果可以看出,传递确实是地址。但是即便如此,在函数内对形参的修改不会对实参造成任何实质的影响,因为对形参的重新赋值,只是改变了形参所指向的内存单元(changeA里两次调用print id(a)得到不同的结果),却没有改变实参的指向。在C的层面看也许类似下面的情节:
void changeA(void * pa)
{
pa=malloc(sizeof(int));
*(int *)pa=100;
free(pa);
}
精通C的你一眼就看出这个函数永远也改变不了它外面的世界。
也就是说虽然传递的是地址,但像changeA这样的函数改变不了实参的值。
也许会感到困扰?不,我已经在Matlab中习惯了。
一个最典型的例子就是Matlab中删除结构体成员的rmfield函数(参见《Matlab笔记三则》),
(Matlab版本7.0.1)
如果想删除结构体patient的name成员,用
rmfield(patient, 'name');
是永远达不到目的的(就像试图用双手抓住自己的领子,把自己提到空中);
迷途知返的做法是:
patient = rmfield(patient, 'name');
Q4: python怎么使用指针
python 不像cpython函数指针吗, 没办法直接使用指针。指针就是内存地址。
python中python函数指针吗,最接近指针的就是, id() 返回某个对象的唯一id,类似于地址了。
python函数指针吗的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于py 指针、python函数指针吗的信息别忘了在本站进行查找喔。








