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]

  • 相关阅读:
    mysql外键(FOREIGNKEY)使用介绍
    MYSQL数据库-约束
    mysql探究之null与not null
    爬虫
    http://blog.csdn.net/w_e_i_/article/details/70766035
    Python 3.5安装 pymysql 模块
    Python 3.5 连接Mysql数据库(pymysql 方式)
    hdu Bone Collector
    hdu City Game
    hdu Largest Rectangle in a Histogram
  • 原文地址:https://www.cnblogs.com/NB01/p/14088296.html
Copyright © 2011-2022 走看看