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参数传递采用的肯定是"传对象引用 ...
随机推荐
- 准备开发开放API接口
准备开发APP开放接口,允许JQUERY直接调用http://blog.csdn.net/wuxiangege/article/details/52238968 SIGN的设计与实现http://bl ...
- java javac 的区别
cmd中,执行java命令与javac命令的区别: javac:是编译命令,将java源文件编译成.class字节码文件. 例如:javac hello.java 将生成hello.class文件 j ...
- thinkphp5.0配置nginx重写规则
我的centeros7.3系统,单主机实例: vi /usr/local/nginx/conf/nginx.conf 在如图红框位置加入以下代码(图片是截取的,截取部分上方还有其他的默认配置代码,代码 ...
- django web 自定义通用权限控制
需求:web系统有包含以下5个url,分别对于不同资源: 1.stu/add_stu/ 2.stu/upload_homework/ 3.stu/query_homework/ 4.stu/add_r ...
- flutter ui
快速生成无状态模板 void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget ...
- HDU 1495 非常可乐【BFS/倒水问题】
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- codeforces 868B The Eternal Immortality【暴力+trick】
B. The Eternal Immortality time limit per test 1 second memory limit per test 256 megabytes input st ...
- 千克与磅之间的转换 Exercise05_05
/** * @author 冰樱梦 * 时间:2018年下半年 * 题目:千克与磅之间的转换 * */ public class Exercise05_05 { public static void ...
- Problem S: 零起点学算法14——三位数反转
#include<stdio.h> #include<stdlib.h> int main() { int a,b,c,s; scanf("%d",& ...
- 从cmd连接mysql数据库控制台
在cmd中进入mysql安装目录的bin目录然后执行命令 mysql -uuser -ppassword database比如用户名为root,密码为mysql,数据库为test命令如下mysql - ...