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



      

相關文章
相關標籤/搜索