rjps.net
当前位置:首页 >> Python中函数调用是传值还是传引用 >>

Python中函数调用是传值还是传引用

python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方式.这种方式相当于传值和传引用的一种综合.如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象.如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象.

python中所有数据都是对象,所以传参也是传的对象的引用,这个引用在函数执行前和执行后是不会被改变的,如:num = 1 def change(num):print(id(num)) num = 2 print(id(num)) 执行change(num)后num的值还是1 可以看到在执行前num的id值

内置类型按值传递, 有需要的情况下按引用传递.user defined types 按引用传递, 在不需要修改传入对象的时候按const引用传递.

function a(aa){ var muid = aa; return muid;}function b(bb){ return a(bb);}或者var muid;function a( aaa ) { muid = aa;}function b( bb ){ a(bb);return muid;} js中如果知在函数外声明变量道,那么内这个变量在函数内外都可用如果在函数内声容明变量,那么这个变量只能在函数内使用

传递值是把值做一份拷贝,传入函数传递引用是把变量的地址传入函数,只要值变更,就会生效

python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方式.这种方式相当于传值和传引用的一种综合.如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象.如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象.原文来自:https://www.cnblogs.com/loleina/p/5276918.html

值传递仅仅传递的是值引用传递,传递的是内存地址,修改后会改变内存地址对应储存的值.用数组来举例就最清楚了,例如我们定义一个数组a[]={1,2};那么a[0]=1,a[1]=2.如果我们把数组a里的元素值作为参数传递,实际上只是进行了值传递,对数组本身没有影响如果我们把 数组a的指针作为参数传递,那么假如处理的函数就可以直接修改数组a里的值.代码实例:(只是写个大概的逻辑,语法可能有错误)main(){ int a[]={1,2};test(a);printf(a[0]); //此处打印的值是3, 这就是引用传递.}public void test(int b[]){ b[0]=3;}

函数传值,只是起到一个“传”的作用,在调用函数中修改,只会在调用函数的这个作用域中起作用.函数传地址,一般通过传指针或传引用.它在调用函数的时候,如果改变了传入地址中的数据,即地址所指向的地址空间.而通过传值,相当于在内存中拷贝了一份,在调用函数中,只改变了拷贝值所在的地址空间的数据,而不是改变所传入值的地址空间的数据 a1和a2都是运行了,只是a2运行的并没有改变传入的值!

python是值传递,但是list,dict这种容器类型,因为是动态绑定的,所以修改是会有影响的.

值传递仅仅传递的是值 引用传递,传递的是内存地址,修改后会改变内存地址对应储存的值.用数组来举例就最清楚了,例如我们定义一个数组a[]={1,2}; 那么a[0]=1,a[1]=2.如果我们把数组a里的元素值作为参数传递,实际上只是进行了值传递,对数组本身没有影响 如果我们把 数组a的指针作为参数传递,那么假如处理的函数就可以直接修改数组a里的值.代码实例:(只是写个大概的逻辑,语法可能有错误) main() { int a[]={1,2}; test(a); printf(a[0]); //此处打印的值是3, 这就是引用传递.} public void test(int b[]) { b[0]=3; }

网站首页 | 网站地图
All rights reserved Powered by www.rjps.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com