• python默认参数问题


    我们在定义默认参数时,有时会遇到一写似乎难以理解的问题。比如,在第二次调用函数时,默认参数记住了上一次执行的结果:

    >>> def test(L=[3,]):
    ...     L.append("end")
    ...     print(id(L))
    ...     return L
    ...
    >>> test()
    2529720312648
    [3, 'end']
    >>> test()
    2529720312648
    [3, 'end', 'end']
    >>> test()
    2529720312648
    [3, 'end', 'end', 'end']
    >>> test([1,2,3])
    2529720300488
    [1, 2, 3, 'end']
    >>> test()
    2529720312648
    [3, 'end', 'end', 'end', 'end']
    >>>
    

    看了一下上面代码,我们不难发现,当我们不带参数执行test()函数时,它的默认参数会记住上次的执行结果。原因时默认参数是一个列表变量,它的地址在开始时已经定住了,所以每次改变都会被记录下来。
    但是,但你带参数执行test([1,2,3])时,你会发现,函数会为[1,2,3]重新开辟一个地址。
    本质上,默认参数和你自己输入的列表参数时两个不同的变量。所以,才会有上面精彩的部分。


    版权:保留所有解释权。转发请注明出处。


  • 相关阅读:
    String
    Map和Set
    js的栈与堆
    js的私有属性
    随便谈一谈原型
    前端页面优化提速
    nth-child和nth-of-type
    重复输出字符串
    闭包
    mongodb内嵌文档的查询
  • 原文地址:https://www.cnblogs.com/busui/p/7211805.html
Copyright © 2020-2023  润新知