博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python中函数参数传递问题
阅读量:5024 次
发布时间:2019-06-12

本文共 1703 字,大约阅读时间需要 5 分钟。

先上两个例子:

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

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

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

a = []def fun(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


 

 

看下面几个例子:

>>> def modifier(number,string,list):    number = 5    string = 'GoodBye'    list = [4,5,6]    print "Inside:", number,string,list    >>> num = 10>>> string = 'Hello'>>> list = [1,2,3]>>> print 'Before:', num, string, listBefore: 10 Hello [1, 2, 3]>>> modifier(num,string,list)Inside: 5 GoodBye [4, 5, 6]>>> print 'After:', num, string, listAfter: 10 Hello [1, 2, 3]

 

>>> def modifier(list,dict):    list[0] = 10    dict['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}

 

>>> def swap(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

转载于:https://www.cnblogs.com/hanggegege/p/5823337.html

你可能感兴趣的文章
Coding 第一次体验
查看>>
ES--03
查看>>
AIO,BIO,NIO区别
查看>>
园子里的一个Dal类
查看>>
时间模块
查看>>
appium+python自动化42-微信公众号 (可能以后会遇到也遇到切换不了webview的问题 记录再此 还没试)...
查看>>
扫描器的高效实现
查看>>
从RGB色转为灰度色算法
查看>>
Bruce Zhang » Windows Communication Foundation之旅(Part Two)
查看>>
ccflow_005.请假流程-傻瓜表单-审核组件模式
查看>>
微软 2010 年上半年产品技术支持服务到期时间表
查看>>
android 系统提供的 Service
查看>>
【iCore双核心组合是开发板例程】【uCGUI 例程及代码包下载】
查看>>
网络安全整改小技巧
查看>>
基本数据类型对象包装类、自动装箱和自动拆箱
查看>>
第六届蓝桥杯省赛---三羊献瑞
查看>>
小组项目冲刺第六天的站立会议
查看>>
delphi 给EXE文件增加区段
查看>>
poj 1548(最小路径覆盖)
查看>>
IBM DB2 pureScale 在 Power 平台上的性能调优
查看>>