python函数中参数是如何传递的?
python中一切皆对象,函数中参数传递的是对象的引用。
1在函数中改变变量指向的对象,即指向不同对象。
当在函数中修改传递进来的变量指向另一个对象时,实参的对象不会改变。
>>> def fun(num,l,d):
... num=;
... l=[,,]
... d={'a':}
... print("inside:","num=%f,l=%s,d=%s"%(num,l,d))
...
>>> num=
>>> l=[,,]
>>> d={'nice':}
>>> print("before:","num=%f,l=%s,d=%s"%(num,l,d))
before: num=1.000000,l=[, , ],d={'nice': }
>>> fun(num,l,d)
inside: num=123.000000,l=[, , ],d={'a': }
>>> print("after:","num=%f,l=%s,d=%s"%(num,l,d))
after: num=1.000000,l=[, , ],d={'nice': }
需要说明的是:函数内部的num,l,d和命令行里的num,l,d是不同的变量,只是名字相同。函数内部的是形参,命令行里的是实参。
2修改传递进来对象的内容,即不是让形参指向不同对象,而是通过引用修改对象内容。当然这个对象必须是可变的。
>>> def fun2(num1,l1,d1):
... num1=
... l1[]=
... d1['a']=
... print("inside:","num1=%f,l1=%s,d1=%s"%(num1,l1,d1))
...
>>> num=
>>> l=[,,]
>>> d={'a':,'b':}
>>> print("before:","num=%f,l=%s,d=%s"%(num,l,d))
before: num=111.000000,l=[, , ],d={'a': , 'b': }
>>> fun2(num,l,d)
inside: num1=123.000000,l1=[, , ],d1={'a': , 'b': }
>>> print("after:","num=%f,l=%s,d=%s"%(num,l,d))
after: num=111.000000,l=[, , ],d={'a': , 'b': }
小结:python中一切皆对象,函数中传递的是对象的引用,当形参指向了不同对象,实参不会改变;当形参通过传递来的引用修改了对象的内容,实参会跟着改变,因为形参和实参指向的是同一个对象。其中不仅是函数参数的传递是这样,在函数内部也是这样。当一个变量向另一个变量赋值时,给的是对象的引用,这个对象的引用,感觉相当于c语言中变量的地址,只是在python中,这个地址变量是通用的,可以指向任意类型,当你改变了这个地址,相当与python中指向了不同对象,原来变量的地址没有改变,所以原来变量指向的地址的内容没有改变。当你通过这个地址改变了地址里面的内容时,原来变量指向的地址的内容也会跟着改变。
python函数中参数是如何传递的?的更多相关文章
- Python函数中参数类型
在学习Python函数的时候,函数本身的定义和调用并不是很复杂,但是函数的参数类型和用法的确有些复杂.在此做一个小结,加深理解. Python参数的定义 负责给函数提供一些必要的数据或信息,以保证函数 ...
- python函数中参数的传递
Python唯一支持的参数传递方式是『共享传参』(call by sharing)多数面向对象语言都采用这一模式,包括Ruby.Smalltalk和Java(Java的引用类型是这样,基本类型按值传递 ...
- Python函数中参数* 和 ** 的区别
* 函数接收参数为元组 例如 def myfun(*args): #相当于 def myfun(1,2,3) ==> args 就相当于(1,2,3) for a in args: pri ...
- Python 函数中参数的分类及使用
######################非固定参数################## #第一种方式:def send_alert(msg,*users):##*users 是非固定参数,将传过来 ...
- Python 函数中,参数是传值,还是传引用?
在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码. 代码段1: def foo(arg): arg = 2 print(a ...
- python函数中把列表(list)当参数时的"入坑"与"出坑"
在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑!! 入坑 def f(x,li=[]): for i in range(x): li.append(i*i ...
- python:函数中五花八门的参数形式(茴香豆的『回』字有四种写法)
毫不夸张的说,python语言中关于函数参数的使用,是我见过最为灵活的,随便怎么玩都可以,本文以数学乘法为例,演示几种不同的传参形式: 一.默认参数 def multiply1(x, y): retu ...
- Python函数中的可变参数
在Python函数中,还可以定义可变参数. 如:给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……. 要定义出这个函数,我们必须确定输入的参数.由于参数个数不确定,我们首先想到可以把 ...
- python函数中的参数类型
python函数中的参数 动态获取函数的参数 python的函数类型详解
随机推荐
- PHP MySQL -处理语句
PHP MySQL 预处理语句 预处理语句对于防止 MySQL 注入是非常有用的. 预处理语句及绑定参数 预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高. 预处理语句的工作原理如下: 预 ...
- Struts2(二)action的三种方式
一.普通java类 package com.pb.web.action; /* * 创建普通的java类 */ public class HelloAction1 { public String ex ...
- Java从零开始学十四(包和访问控制)
一.java中的包 Java文件的组织形式Windows中的文件功能类似 在开发比较大的项目时,不可能只涉及到一个java文件,可能要创建几十,甚至几百个java文件,这个时候,我们就可以使用包,把相 ...
- 过滤器(web基础学习笔记二十一)
一.过滤器简介 二.在Eclipse中创建过滤器 三.使用过滤器设置全部web字符编码 public void doFilter(ServletRequest request, ServletResp ...
- Mysql自己主动备份
Mysql自己主动备份 批处理命令: set"Ymd=%date:~,4%%date:~5,2%%date:~8,2%" set"hMs=%time:~,2%%time: ...
- 设定StatusBar的文字成不同的颜色
设定StatusBar上的文字,该文字以StatusBar所在Form的字型设定为准,并以form的ForeColor为字的颜色,文字过长时,自动会截除这个程式的实质意义不太大,因为当文字被盖掉後需自 ...
- 包装类、object、单例模式、final、抽象类
/*包装类*/ /* byte Byte short Short int Integer long Long char Character float Float ...
- cordova 命令行打包apk
Cordova 打包 Android release app 过程详解: 1.全局安装Cordova CLI: npm install -g cordova 2.创建项目: cordova creat ...
- html中title属性换行实现
本文主要讲解titile属性换行的实现方式.<title> 元素可定义文档的标题,可以应用在img.a等标签上. 1.实现方式: <!DOCTYPE html> <htm ...
- lftp mirror 上传目录
1. lftp的确很强大, 要学习一下. sudo yum install lftp (测试了一下,ftp软件才92K,lftp有2.3M) 2. lftp mirror 能上 ...