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参数传递采用的肯定是"传对象引用 ...
随机推荐
- 使用厂商MIB库查找设备OID值 并实施监控的方法
http://chuansong.me/n/2700132 https://wenku.baidu.com/view/eeaeb1d680eb6294dd886cc7.html
- 从dao层查出的数据到页面时数值都是零的异常
异常问题: IllegalArgumentException: argument type mismatch at cn.tedu.utils.BeanListHandler.handle(BeanL ...
- Aras增加新用户
Aras中新增用户,这里特别提醒,用户密码下面的可以登陆必须勾选,如不勾选刚出现不能登陆的情况. 增加用户后,将用户加入至与原同事一样的Identities(例如Sales/All Employees ...
- 训练指南 UVALive - 4043(二分图匹配 + KM算法)
layout: post title: 训练指南 UVALive - 4043(二分图匹配 + KM算法) author: "luowentaoaa" catalog: true ...
- 灯泡游戏 (Kruskal)(并查集)
灯泡游戏 时间限制: 1 Sec 内存限制: 64 MB提交: 9 解决: 4[提交][状态][讨论版] 题目描述 有 一个n行m列的矩阵,左上角坐标是(0,0),右下角坐标是(n-1,m-1). ...
- memcahced部署
Memcached是一个内存数据库,数据以key/value键值对的形式保存在服务器预先分配的内存区块中,由于Memcached服务自身没有对缓存的数据进行持久化存储的设计,因此,在服务器端的Memc ...
- js创建json对象
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 原始DAO开发
1,pojo package com.songyan.dao; import com.songyan.pojo.Student; public interface StudentDao { publi ...
- 长按事件OnLongClickListener
1.MainActivity.java package com.example.administrator.hello4; import android.support.v7.app.AppCompa ...
- Swift开发经验——外部参数名
一.什么是外部参数名? 浅显地说,外部参数名就是在调用一个方法时要在方法的参数前面加上一个特定的名字,目的是便于阅读代码,提高维护效率. 二.在最新的Xcode中,外部参数名的性质与用法如下 性质 ...