美文网首页
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 函数参数作为引用时

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