美文网首页
python参数传递

python参数传递

作者: vannesspeng | 来源:发表于2018-10-15 21:26 被阅读15次

看两个例子:

a = 1

def fun(a):

    a= 2

fun(a)

print(a)  # 1

a = []

def fun(a):

    a.append(1)

fun(a)

printa  # [1]

所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中void*的感觉。

通过id来看引用a的内存地址可以比较理解:

a = 1

def fun(a):

    print "func_in",id(a)  # func_in 41322472

    a= 2

    print "re-point",id(a), id(2)  # re-point 41322448 41322448

print "func_out",id(a), id(1)  # func_out 41322472 41322472

fun(a)

printa  # 1

注:具体的值在不同电脑上运行时可能不同。

可以看到,在执行完a = 2之后,a引用中保存的值,即内存地址发生变化,由原来1对象的所在的地址变成了2这个实体对象的内存地址。

而第2个例子a引用保存的内存值就不会发生变化:

a = []

def fun(a):

    print "func_in",id(a)  # func_in 53629256

    a.append(1)

print "func_out",id(a)    # func_out 53629256

fun(a)

printa  # [1]

这里记住的是类型是属于对象的,而不是变量。而对象有两种,“可更改”(mutable)与“不可更改”(immutable)对象。在python中,strings, tuples, 和numbers是不可更改的对象,而 list, dict, set 等则是可以修改的对象。(这就是这个问题的重点)

当一个引用传递给函数的时候,函数自动复制一份引用,这个函数里的引用和外边的引用没有半毛关系了.所以第一个例子里函数把引用指向了一个不可变对象,当函数返回的时候,外面的引用没半毛感觉.而第二个例子就不一样了,函数内的引用指向的是可变对象,对它的操作就和定位了指针地址一样,在内存里进行修改.

如果还不明白的话,这里有更好的解释: http://stackoverflow.com/questions/986006/how-do-i-pass-a-variable-by-reference

相关文章

  • Python的参数传递

    Python的参数传递概述 根据Python的官方文档,Python中的参数传递机制是所谓的pass by ass...

  • 2021-09-10

    python调用shell脚本 1. 传入参数 python文件 可以套用python传递参数,二次传递给shel...

  • python脚本传递参数

    给python程序传递参数 运行python脚本时有时需要执行实传递参数 在linux下: [root@Test ...

  • 抓取解析接口的视频真实地址(五)

    php调用python并传递参数

  • Python 函数的参数传递\*args和\**kwargs

    Python 函数的参数传递*args和**kwargs 参数传递机制具有值传递(int、float等值数据类型)...

  • Python函数参数传递机制(超级详细)

    Python中,函数参数由实参传递给形参的过程,是由参数传递机制来控制的。通过学习《Python函数值传递和引用传...

  • python参数

    python中参数传递有顺序传递,关键词传递,默认参数和不定长参数四种形式 顺序传递 顺序传递就是按照形参的顺序依...

  • python的参数传递

    一、前言 在python中,函数参数的定义和传递有以下几种方式: 在python中,参数可以按照顺序传递,在调用函...

  • python参数传递

    看两个例子: a = 1 def fun(a): a= 2 fun(a) print(a) # 1 a = [...

  • python 传递参数

    返回结果 显然python传参数的方式是传引用。 不可变对象 对于不可变对象,你在函数内做什么都不会改变外面的结果...

网友评论

      本文标题:python参数传递

      本文链接:https://www.haomeiwen.com/subject/pzpqzftx.html