zoukankan      html  css  js  c++  java
  • python中函数的默认参数是空数组

    函数的默认参数 如果为空数组:

    def default_para_without_trap(para=[], value=0):
        print(id(para))
        para.append(value)
        print(id(para))
        return para
    
    print('第一步')
    print('函数返回值:{}'.format(default_para_without_trap(value=100)))
    print('第二步')
    print('函数返回值:{}'.format(default_para_without_trap(value=50)))
    

    结果:

    第一步
    1652247234376
    1652247234376
    函数返回值:[100]
    第二步
    1652247234376
    1652247234376
    函数返回值:[100, 50]

    可以看出指向的都是同一个内存地址,因为数组是可变容器,里面的值发生改变,但指向的内存地址没有发生改变,所以第二次调用的是第一次已经添加了数据的数组。
    而不可变数据类型,因为它的值是如果改变了,内存地址也要相应的变化,所以不会存在这种情况。

    所以应该在每次调用时初始化

    def default_para_without_trap(para=None, value=0):
        print(id(para))
        if para is None:
            para = []
        print(id(para))
        para.append(value)
        print(id(para))
        return para
    
    print('第一步')
    print('函数返回值:{}'.format(default_para_without_trap(value=100)))
    print('第二步')
    print('函数返回值:{}'.format(default_para_without_trap(value=50)))
    

    第一步
    1809481008
    1743164737352
    1743164737352
    函数返回值:[100]
    第二步
    1809481008
    1743164737352
    1743164737352
    函数返回值:[50]

  • 相关阅读:
    CentOS7 安装 mysql
    redis简介以及redis集群配置
    分布式布局简述
    字符串
    接口
    接口回调
    java关键字之static
    java关键字之final
    java关键字之abstract
    memcache的配置
  • 原文地址:https://www.cnblogs.com/NB01/p/14088296.html
Copyright © 2011-2022 走看看