美文网首页
Python 函数参数作为引用时

Python 函数参数作为引用时

作者: 九点半的马拉 | 来源:发表于2018-05-19 10:45 被阅读0次

Python唯一支持的参数传递模式是 共享传参, 即函数的各个参数获得实参中的各个引用的副本,也就是说,函数内部的形参是实参的别名。

函数可能修改接收的对象
从程序中可以看出对于不变类型的int或元组,变量没有改变,而作为可变类型的列表,变量发生了变化。
而很多时候我们不不想修改外部的数据,只想对传进来的数据进行修改。那么使用可变类型进行传参时也可能对外部数据进行修改,达不到预期的结果。下面是一个很难发现的问题。
不要使用可变类型作为参数的默认值
运行结果
从上面的程序和运行结果可知,bask1的运行结果正常,bask2没有传递参数,就赋值为默认的空列表,结果正常,而bask3一开始也是空的,应该是输出空列表,但结果不是,并且改变bask3的内容时,bask2的内容也发生了变化,问题在于bask2.teams和bask3.teams都指向了同一列表。出现这种情况的原因是因为self.teams变成了teams参数默认值的别名,默认值在定义函数时计算,因此默认值也变成了函数对象的属性。
可变默认值导致的这个问题说明了为什么通常使用None作为接收可变值的参数的默认值,解决方案可以是这样
解决方案
运行结果
从中可以看到bask2与bask3的结果不同,在引用外部数据时可加上list(),产生副本,对实例变量teams修改时就不会对basketball_team产生影响,如果不加list()函数,那么basketball_team内容也随之发生变化

提示:内容参考<<流畅的python>>这本书,写的很好

相关文章

  • Python 函数参数作为引用时

    Python唯一支持的参数传递模式是 共享传参, 即函数的各个参数获得实参中的各个引用的副本,也就是说,函数内部的...

  • Python 函数参数详解

    [TOC] Python 函数参数 前言 最近在跟同事讨论一个方法的调用时涉及到了 Python 函数的位置参数和...

  • Python的函数和参数

    实参和形参 parameter 是函数定义的参数形式argument 是函数调用时传入的参数实体。 python的...

  • Python中的*args和**kwargs用法

    用法 Python的参数有位置参数和关键字参数之分.位置参数之间有顺序之分.在函数定义或者函数调用时,各种参数之间...

  • [Code] Python简单小知识

    1. Python函数参数 1. 位置参数 调用时根据定义参数的顺序传参,如下例: 2. 默认参数 定义函数时写入...

  • Python高阶函数学习笔记

    python中的高阶函数是指能够接收函数作为参数的函数 python中map()函数map()是 Python 内...

  • 深入函数参数

    函数参数 Python允许具有可变长参数的函数。使用*args作为函数参数,可以将任意数量的参数传递给该参数。然后...

  • Python函数

    Python函数 1.函数定义 2.模块调用 3.函数参数 必须参数必须以正确的顺序传入,且调用时必须与生明时保持...

  • ES6---函数与对象的语法糖

    对未定义的参数的解决办法(默认参数值) 在调用时解析 在函数被调用时,参数默认值会被解析,所以不像Python中的...

  • task4

    1.函数关键字使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数...

网友评论

      本文标题:Python 函数参数作为引用时

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