Python中函数参数传递问题【转】
1.
Python passes everything the same way, but calling it "by value" or "by reference" will not clear everything up, since Python's semantics are different than the languages for which those terms usually apply. If I was to describe it, I would say that all passing was by value, and that the value was an object reference.
Python passes references-to-objects by value (like Java), and everything in Python is an object. This sounds simple, but then you will notice that some data types seem to exhibit pass-by-value characteristics, while others seem to act like pass-by-reference... what's the deal?
It is important to understand mutable and immutable objects. Some objects, like strings, tuples, and numbers, are immutable. Altering them inside a function/method will create a new instance and the original instance outside the function/method is not changed. Other objects, like lists and dictionaries are mutable, which means you can change the object in-place. Therefore, altering an object inside a function/method will also change the original object outside.
Actually, what Python passes includes both arguments and return statements.
2.
Python中函数的参数传递问题,函数参数的传递往往是一个难以理解的概念,记得在C语言中有一个经典的例子如下所示:
- int swap(int a,int b)
- {
- int temp;
- temp = a;
- a = b;
- b = temp;
- return ;
- }
- int a = ,b = ;
- printf("Before Swap a = %d, b = %d\n",a,b);
- swap(a,b);
- printf("After Swap a= %d,b = %d\n",a,b);
- >>> IntNum =
- >>> Num1 = IntNum
- >>> id(IntNum),id(Num1)
- (, )
- >>> Num2 =
- >>> id(IntNum),id(Num1),id(Num2)
- (, , )
- >>> intNum =
- >>> Num1 =
- >>> Num2 =
- >>> id(IntNum),id(Num1),id(Num2)
- (, , )
- #list
- >>> list1 = [,,,,]
- >>> list2 = [,,,,]
- >>> id(list1),id(list2)
- (, )
- >>> list1[]=
- >>> list1
- [, , , , ]
- >>> id(list1),id(list2)
- (, )
- #dict
- >>> dict1 = {'a':,'b':,'c':,'d':}
- >>> dict2 = {'a':,'b':,'c':,'d':}
- >>> id(dict1),id(dict2)
- (, )
- >>> dict1['d'] =
- >>> dict1
- {'a': , 'c': , 'b': , 'd': }
- >>> dict2
- {'a': , 'c': , 'b': , 'd': }
- >>> id(dict1),id(dict2)
- (, )
- def function(args):
- function_block
- >>> def modifier(number,string,list):
- number =
- string = 'GoodBye'
- list = [,,]
- print "Inside:", number,string,list
- >>> num =
- >>> string = 'Hello'
- >>> list = [,,]
- >>> print 'Before:', num, string, list
- Before: Hello [, , ]
- >>> modifier(num,string,list)
- Inside: GoodBye [, , ]
- >>> print 'After:', num, string, list
- After: Hello [, , ]
- >>> def modifier(list,dict):
- list[] =
- dict['a'] =
- print 'Inside list = %s, dict = %s' %(list,dict)
- >>> dict = {'a':,'b':,'c':}
- >>> list = [,,,,]
- >>> print 'Before list = %s, dict = %s' %(list,dict)
- Before list = [, , , , ], dict = {'a': , 'c': , 'b': }
- >>> modifier(list,dict)
- Inside list = [, , , , ], dict = {'a': , 'c': , 'b': }
- >>> print 'After list = %s, dict = %s' %(list,dict)
- After list = [, , , , ], dict = {'a': , 'c': , 'b': }
- >>> def swap(list):
- temp = list[]
- list[] = list[]
- list[] = temp
- >>> list = [,]
- >>> list
- [, ]
- >>> swap(list)
- >>> list
- [, ]
Python中函数参数传递问题【转】的更多相关文章
- python中函数参数传递的几种方法
转自 http://www.douban.com/note/13413855/ Python中函数参数的传递是通过“赋值”来传递的.但这条规则只回答了函数参数传递的“战略问题”,并没有回答“战术问题 ...
- python 中函数参数传递形式
python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...
- Python中函数参数传递问题
先上两个例子: http://python.jobbole.com/85231/ a = 1 def fun(a): a = 2 fun(a) print a # 结果为1 fun(a)中的a,可以看 ...
- Python中函数的参数传递与可变长参数
转自旭东的博客原文 Python中函数的参数传递与可变长参数 Python中传递参数有以下几种类型: (1)像C++一样的默认缺省函数 (2)根据参数名传参数 (3)可变长度参数 示例如下: (1)默 ...
- python中的参数传递和返回值
python中的参数传递类似java,有着自己的内存回收机制,这和C++有着很大的差别. 1.函数的参数传递: >>> a = [, , ] >>> def fun ...
- python中函数参数的引用方式
值传递和引用传递时C++中的概念,在python中函数参数的传递是变量指向的对象的物理内存地址!!! python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方 ...
- Python中的参数传递问题
首先需要说明python中元组,列表,字典的区别. 列表: 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单. 例如:lst = ['arwen',123] 向list中添加项有两种方法:ap ...
- 【Python】解析Python中函数的基本使用
1.简介 在Python中定义函数的基本格式为: def <函数名>(参数列表): <函数语句> return <返回值> Python中的函数形式比较灵活,声明一 ...
- 深入理解python中函数传递参数是值传递还是引用传递
深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...
随机推荐
- 怎么将string list 转成有特殊字符分开字符串
https://stackoverflow.com/questions/4021851/join-string-list-elements-with-a-delimiter-in-one-step Y ...
- [BZOJ2730][HNOI2012]矿场搭建 点双 割点
2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2852 Solved: 1344[Submit][Stat ...
- scrapy 工作流程
Scrapy的整个数据处理流程由Scrapy引擎进行控制,其主要的运行方式为: 引擎打开一个域名,蜘蛛处理这个域名,然后获取第一个待爬取的URL. 引擎从蜘蛛那获取第一个需要爬取的URL,然后作为请求 ...
- shell脚本学习(二)
shell传递参数 shell脚本在执行是可以传递参数,脚本内获取参数的格式为:$n,n为一个数字,1为第一个参数,2为第二个参数,以此类推 其中,$0代表了要执行的文件名 实例: 代码如下: #!/ ...
- Dart类
Dart中没有访问控制符,无论类还是方法默认都是public 1.构造函数 构造函数可以没有方法体,并且this可以直接在传参时直接对实例赋值 Bicycle(this.cadence, this.s ...
- 基于JS的event-manage事件管理库(一步一步实现)
关于文章 最近在提升个人技能的同时,决定把自己为数不多的沉淀记录下来,让自己理解的更加深刻,同时也欢迎各位看官指出不足之处. 随着node.js的盛行,引领着Javascript上天下地无所不能啊,本 ...
- amq笔记:记一个关于PooledConnectionFactory的问题
替人排查一个关于amq连接数的问题,使用PooledConnectionFactory进行连接池管理,设置了连接数上限为3,但部署到服务器之后,瞬间建立了几百个连接,用netstat -an 查看,发 ...
- numeric column can contains null
- AxureRP7超强部件库打包下载
摘要: 很多刚刚开始学习Axure的朋友都喜欢到网上搜罗各种部件库(组件库)widgets library ,但是网络中真正实用的并且适合你使用的少之又少,最好的办法就是自己制作适合自己工作内容的部件 ...
- 线程协作-CountDownLatch
CountDownLatch允许一个或多个线程等待其他线程完成操作.