zoukankan      html  css  js  c++  java
  • 由默认参数list引起的疑惑——python

    一个函数:

    def add_end(l=[]):

        l.append('END')

        return l

    调用add_end([1,2,3])时显示[1, 2, 3, 'END']

    正确

    但是调用add_end()时,第一次正确,['END']

    第二次就显示['END','END'],第三次显示['END','END','END']

    疑惑:

    默认参数是[],但是函数似乎每次都“记住了”上次添加了'END'后的list。

    这里是,list一个变量,第一次调用的时候,已经初次化好了,每次调用函数,改变了l的内容,都会使list改变,不再是函数定义的[]了,也就是只初始化一次

    所以默认参数必须执行不可变的数据类型,这样才会使变量不改变,如元组tuple和字符串

    而上面的函数也可以改变为这样:

    def add_end(L=None):
        if L is None:
            L = []
        L.append('END')
        return L

    也就是不成为默认参数,在下面才生成list
  • 相关阅读:
    ffmpeg
    HDU 1031 Design T-Shirt
    HDU 1029 Ignatius and the Princess IV
    HDU 1022 Train Problem I
    HDU 1017 A Mathematical Curiosity
    HDU 1015 Safecracker
    HDU 1002 A + B Problem II
    HDU 1070 Milk
    高精度算法(一)
    codeblocks 使用心得
  • 原文地址:https://www.cnblogs.com/thouger/p/5117682.html
Copyright © 2011-2022 走看看