码迷,mamicode.com
首页 > 编程语言 > 详细

python函数中参数是如何传递的?

时间:2016-05-14 12:44:37      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

python中一切皆对象,函数中参数传递的是对象的引用。

1在函数中改变变量指向的对象,即指向不同对象。

当在函数中修改传递进来的变量指向另一个对象时,实参的对象不会改变。

>>> def fun(num,l,d):
...     num=123;
...     l=[1,2,3]
...     d={a:123}
...     print("inside:","num=%f,l=%s,d=%s"%(num,l,d))
... 
>>> num=1
>>> l=[1,1,1]
>>> d={nice:111}
>>> print("before:","num=%f,l=%s,d=%s"%(num,l,d))
before: num=1.000000,l=[1, 1, 1],d={nice: 111}
>>> fun(num,l,d)
inside: num=123.000000,l=[1, 2, 3],d={a: 123}
>>> print("after:","num=%f,l=%s,d=%s"%(num,l,d))
after: num=1.000000,l=[1, 1, 1],d={nice: 111}

需要说明的是:函数内部的num,l,d和命令行里的num,l,d是不同的变量,只是名字相同。函数内部的是形参,命令行里的是实参。

2修改传递进来对象的内容,即不是让形参指向不同对象,而是通过引用修改对象内容。当然这个对象必须是可变的。

>>> def fun2(num1,l1,d1):
...     num1=123
...     l1[0]=123
...     d1[a]=123
...     print("inside:","num1=%f,l1=%s,d1=%s"%(num1,l1,d1))
... 
>>> num=111
>>> l=[1,1,1]
>>> d={a:111,b:0}
>>> print("before:","num=%f,l=%s,d=%s"%(num,l,d))
before: num=111.000000,l=[1, 1, 1],d={a: 111, b: 0}
>>> fun2(num,l,d)
inside: num1=123.000000,l1=[123, 1, 1],d1={a: 123, b: 0}
>>> print("after:","num=%f,l=%s,d=%s"%(num,l,d))
after: num=111.000000,l=[123, 1, 1],d={a: 123, b: 0}

小结:python中一切皆对象,函数中传递的是对象的引用,当形参指向了不同对象,实参不会改变;当形参通过传递来的引用修改了对象的内容,实参会跟着改变,因为形参和实参指向的是同一个对象。其中不仅是函数参数的传递是这样,在函数内部也是这样。当一个变量向另一个变量赋值时,给的是对象的引用,这个对象的引用,感觉相当于c语言中变量的地址,只是在python中,这个地址变量是通用的,可以指向任意类型,当你改变了这个地址,相当与python中指向了不同对象,原来变量的地址没有改变,所以原来变量指向的地址的内容没有改变。当你通过这个地址改变了地址里面的内容时,原来变量指向的地址的内容也会跟着改变。

 

python函数中参数是如何传递的?

标签:

原文地址:http://www.cnblogs.com/zhaopengcheng/p/5492183.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!