深入理解python函数传参机制

2022-01-21 0 660

首先需要申明的一点是,python里是没有像C和C++里那样按值传参的说法的。python中的所有东西都是对象,这也是它的强大之处,它没有基本类型之说。

在python中,类型属于对象,变量是没有类型的,这正是python的语言特性,也是吸引着很多pythoner的一点。所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中void*的感觉。所以,希望大家在看到一个python变量的时候,把变量和真正的内存对象分开。

类型是属于对象的,而不是变量。这样,很多问题就容易思考了。

python中的对象可分为一两大类,即可改变的(mutable)和不可改变的(immutale).

而属于immutable类的对象主要有strings,tuples,numbers,而列表,字典等其它对象则属于mutale类的对象。

由于python中所有东西都是对象,因此python中的函数传参方式都是按引用传参的(可以理解为传的是指针),具体细节的话,我想就不需要我来说了,相信大家都已经很熟悉按引用传参的方式方法了。

补充:我刚才又仔细看了下上面的内容,可能光凭下面一个案例,一些新手可能还不太明白,因此我在这再做两点个人的总结。

由于函数都是按引用传的,那就出现了一种可能,假如我传一个参数arg进去,但我不希望该参数arg在函数内修改后而影响到函数外的变量arg,如果要达到这种效果是不是有点想其它语言里的传变量复本,对不对?但是在python里没有复本一说,但是它给出了一类对象(immutable不可改变对象,个人估计,这类对象很可能就是因为这样的原因而被创造出来的,呵呵)。那现在我们假设传入一个immutable变量对象imvar到函数内,并在函数内对imvar进行修改操作,由于imvar是不可改变对象,所以在对其进行修改时,编译器会首先为其创建一个复制对象copy_imvar再对之进行修改,所以函数中修改的实际上不是最初的对象imvar了,因此它的值仍是进入函数处理前的值。相反地如果传是可变类型变量的话,那则是直接在引用上修改,因此在函数内外操作的都是同一对象,因此函数内的操作会直接影响到函数外的相同变量的值。不知道现在是否好理解些,如果还不是很明白,结合下面的例子看看应该会明白了吧。

下面直接给出一个测试案例:

#test
num=10
string=\'test\'
tupleset=(1,2,3)
listset=[9,8,7]
def change(num,string,tupleset,listset):
    num+=1
    string+=\' into new words!\'
    #tupleset.add(12)   error
    tupleset=(12,3,4,4)
    listset.append(10000)
change(num,string,tupleset,listset)   
print num,string,tupleset,listset
------------------------------------------------
ans:10 test (1, 2, 3) [9, 8, 7, 10000]

看到结果是不是python中的对象和引用有了更深一步的了解了呢?

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Python教程 深入理解python函数传参机制 http://www.20zxx.cn/294377/xuexijiaocheng/python.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务