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函数中参数是如何传递的?的更多相关文章

  1. Python函数中参数类型

    在学习Python函数的时候,函数本身的定义和调用并不是很复杂,但是函数的参数类型和用法的确有些复杂.在此做一个小结,加深理解. Python参数的定义 负责给函数提供一些必要的数据或信息,以保证函数 ...

  2. python函数中参数的传递

    Python唯一支持的参数传递方式是『共享传参』(call by sharing)多数面向对象语言都采用这一模式,包括Ruby.Smalltalk和Java(Java的引用类型是这样,基本类型按值传递 ...

  3. Python函数中参数* 和 ** 的区别

    * 函数接收参数为元组 例如 def myfun(*args): #相当于 def myfun(1,2,3)    ==> args 就相当于(1,2,3) for a in args: pri ...

  4. Python 函数中参数的分类及使用

    ######################非固定参数################## #第一种方式:def send_alert(msg,*users):##*users 是非固定参数,将传过来 ...

  5. Python 函数中,参数是传值,还是传引用?

    在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码. 代码段1: def foo(arg): arg = 2 print(a ...

  6. python函数中把列表(list)当参数时的"入坑"与"出坑"

    在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑!! 入坑 def f(x,li=[]): for i in range(x): li.append(i*i ...

  7. python:函数中五花八门的参数形式(茴香豆的『回』字有四种写法)

    毫不夸张的说,python语言中关于函数参数的使用,是我见过最为灵活的,随便怎么玩都可以,本文以数学乘法为例,演示几种不同的传参形式: 一.默认参数 def multiply1(x, y): retu ...

  8. Python函数中的可变参数

    在Python函数中,还可以定义可变参数. 如:给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……. 要定义出这个函数,我们必须确定输入的参数.由于参数个数不确定,我们首先想到可以把 ...

  9. python函数中的参数类型

    python函数中的参数 动态获取函数的参数 python的函数类型详解

随机推荐

  1. IIS-将iis直接指向.net代码会出现错误

    这是由于没有bin文件导致的,将bin文件加上之后就可以了.

  2. Transform开发cube模型权限处理之不同用户数据的过滤

    ========================此文不再详细的说transform的开发过程====================================================== ...

  3. C# ftp ListFilesOnServer

    public static bool ListFilesOnServer(Uri serverUri) { // The serverUri should start with the ftp:// ...

  4. IE下target获得焦点时存在虚线的问题

    IE下target获得焦点时存在虚线时,用IE的特定属性:hidefocus="true"即可解决!

  5. 子查询三(在FROM子句中使用子查询)

    FROM子句中使用子查询一般都是返回多行多列,可以将其当作一张数据表 示例一.查询出每个部门的编号,名称,位置,部门人数,平均工资 SELECT d.deptno,d.dname,d.loc,temp ...

  6. VMWare虚拟机“锁定文件失败“怎么办?

    虚拟机突然蓝屏了,然后就启动不了了,提示"锁定文件失败,打不开磁盘或快照所依赖的磁盘"的解决方法: 如果使用VMWare虚拟机的时候突然系统崩溃蓝屏,有一定几率会导致无法启动,会提 ...

  7. spring-tool-suite(STS) 创建 spring boot项目

    1.创建一个Spring Starter Project工程(new --> Spring Starter Project) 2.选择自己需要的依赖,因为想要通过REST方式来验证是否成功创建, ...

  8. 安装调试Installing Odoo

    来自odoo的安装步骤 There are mutliple ways to install Odoo, or not install it at all, depending on the inte ...

  9. Android 如何将Canvas上绘制的内容保存成本地图片(转)

    效果如下图所示 保存在sd卡上的文件为 手机上显示效果为: 1>>在Manifest文件中增加相应权限 <!-- 在SDCard中创建与删除文件权限 --> <uses- ...

  10. 实现锁死的有滚动条的div的表格(datagird)

    JS框架使用Jquery 最终效果: 代码结构: 代码: <HEAD><TITLE>new document</TITLE> <META name=Gener ...