python基础——函数

 

赋值、深浅拷贝

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

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

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

 

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

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

深拷贝,彻底拷贝了一个副本,容器内部元素地址都不同。3d

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

 

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

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

 

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

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

 

 

浅拷贝

 

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))



      

相关文章
相关标签/搜索