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]

  • 相关阅读:
    metadata的使用以及简单的orm模式
    python的cache修饰器
    聊天服务的设计随想
    cherrypy入门
    用python做分布式定时器
    cherrypy & gevent patch
    Python Tornado简单的http request
    连接池的一些感悟
    企业系统架构评估标准
    Nginx与python web服务配置(Uwsgi& FastCGI)
  • 原文地址:https://www.cnblogs.com/NB01/p/14088296.html
Copyright © 2011-2022 走看看