zoukankan      html  css  js  c++  java
  • python基础——函数

    赋值、深浅拷贝

    赋值是将一个对象的地址赋值给一个变量,让变量指向该地址。

    不可变元素:数字、字符串和元组,赋值、浅拷贝和深拷贝都指向同一地址。

    可变元素:列表、字典。浅拷贝和深拷贝指向不同地址。

    浅拷贝仅仅复制了容器中元素的地址。

    浅拷贝是在另一块地址中创建一个新的变量或容器,但是容器内元素的地址均是源对象元素的地址拷贝。也就是说新的容器中指向了旧的元素( 新瓶装旧酒 )。

    深拷贝,完全拷贝了一个副本,容器内部元素地址都不一样。

    深拷贝是在另一块地址中创建一个新的变量或容器,同时容器内元素的地址也是新开辟的,仅仅是值相同而已,是完全的副本。

    python中有一个模块copy,deepcopy函数用于深拷贝,copy函数用于浅拷贝。

    所谓浅拷贝就是对引用的拷贝,所谓深拷贝就是对对象资源的拷贝。

    import copy
    
    n1 = 23   # 数字
    n2 = "abc"   # 字符串
    n3 = ("we", "he", "she")  # 元组
    print(id(n1), id(n2), id(n3))
    
    n4 = n1
    n5 = n2
    n6 = n3
    print(id(n4), id(n5), id(n6))
    
    n7 = copy.copy(n1)
    n8 = copy.deepcopy(n2)
    n9 = copy.deepcopy(n3)
    print(id(n7), id(n8), id(n9))
    
    """
    1501832560 6521888 12307768
    1501832560 6521888 12307768
    1501832560 6521888 12307768
    
    """
    View Code

     数字 、字符串 和 元组,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。

     

    浅拷贝

    import copy
    
    n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
    n2 = ("we", "he", "she")
    n3 = [22,33,44]
    print(id(n1),id(n2),id(n3))
    
    n7 = copy.copy(n1)
    n8 = copy.copy(n2)
    n9 = copy.copy(n3)
    print(id(n7),id(n8),id(n9))
    
    """
    (41310656, 8044176, 41293624)
    (41311808, 8044176, 41315424)
    """
    View Code

    深拷贝

    import copy
    
    n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
    n2 = ("we", "he", "she")
    n3 = [22,33,44]
    print(id(n1),id(n2),id(n3))
    
    m7 = copy.deepcopy(n1)
    m8 = copy.deepcopy(n2)
    m9 = copy.deepcopy(n3)
    print(id(m7),id(m8),id(m9))
    
    """
    (40131008, 7061136, 40113976)
    (40132304, 7061136, 40133416)
    """
    View Code

           

     函数

    函数形参是指针,指向实际参数的。
    修改或删除形参的值 ,实际参数值也变化。

    def func(args):
        print(type(args))
        args.append(123)
        print(args)
    
    li = [1, 2]
    func(li)
    print(li)
    
    """
    <type 'list'>
    [1, 2, 123]
    [1, 2, 123]
    """
    View Code
    
    
    def func(args):
       del args[2:]
    
    li = [1,2,3,4]
    a = func(li)
    print(li)  #[1, 2]
    View Code

    形式参数 赋值 另开辟内存

    def func(args):
      args=123
    
    li = [1,2,3,4]
    a = func(li)
    print(li)  #[1, 2, 3, 4]
    View Code

    lambda 匿名函数

    def f1(ar1, ar2):
        return ar1 + ar2
    
    ret = f1(3, 4)
    print(ret)
    
    
    f2 = lambda ar3, ar4: ar3 + ar4
    ret = f2(3, 4)
    print(ret)
    """
    7
    7
    """
    View Code

    filter,map,reduce

     filter(function, iterable)

    在function不为None的情况下,
      filter(function, iterable)  
        等同于
        [item for item in iterable if function(item)];
        否则等同于
        [item foritem in iterable if item](function为None)。
    def f1(x):
        if x > 22:
            return True
        else:
            return False
    
    ret = filter(f1, [11, 22, 33, 44, 55, 66])
    # 默认处理结果返回是一个类,需要迭代打印,因为浪费内存。 可以用next迭代取值。 或者for循环 循环依次取出
    print(next(ret))
    print(next(ret))
    print(list(ret))
    
    """
    33
    44
    [55, 66]
    """
    View Code

          

    filter中 lambda 函数替换 函数f1

    ret1 = filter(lambda x:x>22,[11,22,33,44])
    print(list(ret1))



          

    
    
  • 相关阅读:
    423. Reconstruct Original Digits from English
    400. Nth Digit
    397. Integer Replacement
    396. Rotate Function
    365. Water and Jug Problem
    335. Self Crossing
    319. Bulb Switcher
    线段树-hdu2795 Billboard(贴海报)
    线段树---求逆序数
    线段树——单点替换区间最值
  • 原文地址:https://www.cnblogs.com/ttrrpp/p/6694169.html
Copyright © 2011-2022 走看看