python函数参数传递的联系_Python中函数参数传递问题

先上两个例子:

http://python.jobbole.com/85231/

a = 1

deffun(a):

a= 2fun(a)print a #结果为1

fun(a)中的a,可以看做函数中的形参,可以用任何字符代替:fun(aaa)

a =[]deffun(a):

a.append(1)

fun(a)print a #结果为 [1]

所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中void*的感觉。

这里记住的是类型是属于对象的,而不是变量。而对象有两种,“可更改”(mutable)与“不可更改”(immutable)对象。在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象。(这就是这个问题的重点)

当一个引用传递给函数的时候,函数自动复制一份引用,这个函数里的引用和外边的引用没有半毛关系了.所以第一个例子里函数把引用指向了一个不可变对象,当函数返回的时候,外面的引用没半毛感觉.而第二个例子就不一样了,函数内的引用指向的是可变对象,对它的操作就和定位了指针地址一样,在内存里进行修改.

http://blog.csdn.net/crazyhacking/article/details/16114897

看下面几个例子:

>>> defmodifier(number,string,list):

number= 5string= 'GoodBye'list= [4,5,6]print "Inside:", number,string,list>>> num = 10

>>> string = 'Hello'

>>> list = [1,2,3]>>> print 'Before:', num, string, list

Before:10 Hello [1, 2, 3]>>>modifier(num,string,list)

Inside:5 GoodBye [4, 5, 6]>>> print 'After:', num, string, list

After:10 Hello [1, 2, 3]

>>> defmodifier(list,dict):

list[0]= 10dict['a'] = 10

print 'Inside list = %s, dict = %s' %(list,dict)>>> dict = {'a':1,'b':2,'c':3}>>> list = [1,2,3,4,5]>>> print 'Before list = %s, dict = %s' %(list,dict)

Before list= [1, 2, 3, 4, 5], dict = {'a': 1, 'c': 3, 'b': 2}>>>modifier(list,dict)

Inside list= [10, 2, 3, 4, 5], dict = {'a': 10, 'c': 3, 'b': 2}>>> print 'After list = %s, dict = %s' %(list,dict)

After list= [10, 2, 3, 4, 5], dict = {'a': 10, 'c': 3, 'b': 2}

>>> defswap(list):

temp=list[0]

list[0]= list[1]

list[1] =temp>>> list = [10,20]>>>list

[10, 20]>>>swap(list)>>>list

[20, 10]

http://blog.chinaunix.net/uid-20937170-id-3275808.html

dd

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值