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]

  • 相关阅读:
    windows 查看端口被占用
    IOC控制反转
    spring配置,spring中的bean 的id不能相同
    prototype 用法
    js闭包用法
    struts2异常处理,global-results定义全局结果处理
    struts2中错误处理
    Struts2配置细节
    hql查询语句 内存中的情况,fetch迫切查询关键字
    Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
  • 原文地址:https://www.cnblogs.com/NB01/p/14088296.html
Copyright © 2011-2022 走看看