• 将列表传递给函数


    当列表被传递给函数时,由于列表是一个可变对象,所以列表的内容肯回在函数调用后改变。

    def main():
        x =1
        y = [1,2,4]
        m(x, y)
        print("x is ", x)
        print("y[0] is", y[0])
    def m(number, numbers):
        number = 1001
        numbers[0] = 5555
    
    main()
    #运行结果
    x is  1  
    y[0] is 5555 #
    

    m被调用后,x保持为1,但y[0]被改变为5555,这是因为y和numbers都指向同一个列表对象。当m(x,y)被调用时,x和y的引用值被传递给number和numbers。由于y包含指向列表的引用值,现在,numbers包含的就是指向同一列表的相同引用值。英语number是不可变的,所以在一个函数里该bain它会创建一个实例,而函数外的原始实例并没有被改变。所以,在函数外面x仍然是1.

    #以上照抄了书本原文,道理懂了,但理解的还不是很透彻,暂且记录。

    将列表作为一个默认函数

    def add(x, lst = []):
        if x not in lst:
            lst.append(x)
        return lst
    def main():
        list1 = add(1) #lst 的默认值[]被创建,add(1)加到lst
        print(list1)
    
        list2 = add(2) #lst是[1]而不是[],add(2)执行时lst就变成[1,2]
        print(list2)
    
        list3 = add(3, [11, 12, 13, 14]) #给出列表参数[11,12,13,14],并且将这个列表传递给lst
        print(list3)
    
        list4 =add(4) #默认列表参数被使用,因为默认列表是[1,2],所以调用add(4)后,默认列表变成[1,2,4]
        print(list4)
    
    main()
    #运行结果
    [1]
    [1, 2] 
    [11, 12, 13, 14, 3]
    [1, 2, 4]

    如果要默认列表每次在函数调用时都是[],可以修改成如下代码

    def add(x, lst = None): 
        if lst == None:
            lst = []
        if x not in lst:
            lst.append(x)
        return lst
    def main():
        list1 = add(1)
        print(list1)
    
        list2 = add(2)
        print(list2)
    
        list3 = add(3, [11, 12, 13, 14])
        print(list3)
    
        list4 =add(4)
        print(list4)
    
    main()
    #运行结果
    [1]
    [2]
    [11, 12, 13, 14, 3]
    [4]
  • 相关阅读:
    Sequence-to-Sequence 论文精读(多层LSTM)
    End-to-End Memory Networks 端到端的记忆网络 精读
    深度之眼PyTorch训练营第二期---16、模型保存与加载
    二叉树
    窗体window
    选项卡tabs
    分割按钮splitbutton
    面板pannel
    分页组件pagination
    信息messager
  • 原文地址:https://www.cnblogs.com/jeff-ideas/p/10540357.html
Copyright © 2020-2023  润新知