zoukankan      html  css  js  c++  java
  • 关于“可变数据类型”做函数默认参数的问题

    若在函数中进行了修改则会有“坑”

    如果我们在函数传参时用这个默认参数并且在函数的内部对可变数据类型数据进行了“修改”,那么这样做是有问题的:如果多次调用同一个函数,被当做参数的这个“可变数据类型”会一直用同一个:

    def func(name,lst=[]):
        lst.append(name)
        print(lst,id(lst))
    
    func(1)
    func(2)
    func(3)
    '''
    结果:
    [1] 1920462303368
    [1, 2] 1920462303368
    [1, 2, 3] 1920462303368
    '''

    由上面的结果可以看出:func函数被调用了三次,每一次的结果“迭代”了。

    传参的时候指定具体的值是没有问题的

    参看下面的代码:

    def func(name,lst=[]):
        lst.append(name)
        print(lst,id(lst))
    
    func(1,lst=[1])
    func(2,lst=[2])
    func(3,lst=[3])
    '''
    结果:
    [1, 1] 2639469556104
    [2, 2] 2639469556104
    [3, 3] 2639469556104
    '''

    可以看到:这样每一次的结果不会“迭代了”;之所以id一样,是因为每一次调用结束后Python解释器将原来的lst回收掉,内存地址分配给了新的“列表”。

  • 相关阅读:
    不用加减乘除做加法
    求1+2+3+...+n
    孩子们的游戏(圆圈中最后剩下的数)
    扑克牌顺子
    翻转单词顺序列
    左旋转字符串
    和为S的两个数字
    和为S的连续正数序列
    毕设进度12
    毕设进度11
  • 原文地址:https://www.cnblogs.com/paulwhw/p/11891081.html
Copyright © 2011-2022 走看看