网站建设资讯

NEWS

网站建设资讯

python两个函数引用,python中一个函数调用另一个函数

Python里面的函数怎么按引用传递参数

如果你用C给Matlab写过MEX程序,那么这个问题是很容易理解的(好像每次讨论Python问题时我总是把Matlab搬了出来…… 《在Matlab中把struct当成Python中的Dictionary使用》《Matlab和Python的几种数据类型的比较》)。

创新互联网站建设提供从项目策划、软件开发,软件安全维护、网站优化(SEO)、网站分析、效果评估等整套的建站服务,主营业务为网站建设、网站设计app软件开发公司以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。创新互联深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

既然提到了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.(它是对象的地址)

有了这个函数,下面的事情就方便多了。

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');

python中调用两个函数,怎样能不超时

超时机制。python中调用两个函数需要给函数设置超时机制,以防止它超时,这里可以用python的signal模块,signal模块可以实现程序内部的信号处理。

python同一个类内两个函数变量怎么调用

可以把变量设置为全局变量:def fun1(): global var1 ...def fun2(): global var1

python跨模块调用函数的问题?

有什么办法省略掉那些被调用函数的参数?

也就是func2只想在调用是传入一个c。

那么func2在定义的时候必须喂饱func1,也就是func2在调用 func1时,当前作用域中要有a,b。

明显图中是没有做到的,没有实际ab

b可以试试在这个文件中直接定义 ab两个变量,那么在第三个文件中引入 func2,就可以直接传c给func2了,因为ab已经在上一步被配置好。

python函数与函数之间值的相互调用

printlist()函数增加一个参数n,变成printlist(n)

调用函数时,将makelist()函数的结果作为printlist(n)函数的参数

printlist(makelist())

python中怎么在一个函数内调用另外一个函数,类

如果是同一包里面,直接就可以使用,如果不是同一个包,那么需要先import后,通过“包名.类名”才能使用。

下面是同一个包里面的案例:

def

a():

print(1)

def

b():

a()

print

(2)

b()


分享名称:python两个函数引用,python中一个函数调用另一个函数
标题URL:http://cdweb.net/article/dssjgic.html