zoukankan      html  css  js  c++  java
  • 经典面试题-python函数之默认参数

    1、可变的默认参数----list 

    示例:

    def add(a, mylist=[]):
        # print(id(mylist))
        mylist.append(a)
        return mylist
    print(add(5))
    print(add(6))
    print(add(6, ["0908"]))
    print(add(7))

    输出结果:

    预期输出 实际输出
    [5]
    [6]
    ['6', 9008]
    [ 7]
    [5]
    [5, 6]
    ['0908', 6]
    [5, 6, 7]

     查看其id

    def add(a, mylist=[]):
        print("mylist_id=",id(mylist))
        mylist.append(a)
        return mylist
    print("mylist=",add(5))
    print("mylist=",add(6))
    print("mylist=",add(6, ["0908"]))
    print("mylist=",add(7))

    output

    mylist_id= 51050248
    mylist= [5]
    mylist_id= 51050248
    mylist= [5, 6]
    mylist_id= 51026632
    mylist= ['0908', 6]
    mylist_id= 51050248
    mylist= [5, 6, 7]

    从输出结果可以看出,在第1,2,4次调用时,mylist的内存地址是不变的,mylist是列表属于可变对象,对其进行操作时,不会重新分配地址,append函数是将元素添加到列表的最后面,所以每次输出时将新的参数添加到列表的最后面

    第3次调用时,mylist的内存地址改变,重新创建对象,所以将默认参数先赋值,然后再将6添加到列表中

    优化

    def add(a, mylist=[]):
        if  mylist is not None:#将列表清空
            mylist=[]
            print("mylist_id=",id(mylist))
            mylist.append(a)
        return mylist
    print("mylist=",add(5))
    print("mylist=",add(6))
    print("mylist=",add(6, ["0908"]))
    print("mylist=",add(7))

    output

    mylist_id= 56728264
    mylist= [5]
    mylist_id= 56728264
    mylist= [6]
    mylist_id= 56753928
    mylist= [6]
    mylist_id= 56753928
    mylist= [7]
  • 相关阅读:
    hdu1828(线段树——矩形周长并)
    hdu1255(线段树——矩形面积交)
    用jQuery获取到一个类名获取到的是一个数组 ,如果对数组中的每个进行相应的操作可以这样进行
    CSS3向外扩散的圆
    鼠标放上去图片会放大
    Django分页
    Django使用富文本编辑器
    Django日志配置
    Linux中的文件类型
    Linux压缩和解压缩
  • 原文地址:https://www.cnblogs.com/qiyuedetiankong/p/10610114.html
Copyright © 2011-2022 走看看