1. 程式人生 > >python 內置函數與匿名函數

python 內置函數與匿名函數

fff 進制 有效 內置 為什麽 lambda函數 print image pla

內置函數

內置函數是python提供的可以直接調用的函數,截至版本3.6.2,python一共有68個內置函數,根據作用不同可以分為作用域相關、叠代器生成器相關、基礎數據類型相關和其他

技術分享圖片

作用域相關

locals(): 以字典的形式返回當前作用域內的內容

globals():以字典的形式返回全局作用域內的內容

叠代器生成器相關

range: 創建一個整數對象,通常用於for循環

next: 內部實際使用了__next__方法,返回叠代器的下一個項目

基礎數據類型相關

1. 數字相關

bool: 將給定參數轉化成bool類型,如果沒有參數返回False

int: 將字符串和數字轉化成整型,int有三點需要註意

(1) int轉化浮點數是向0取整,int(2.8) = 2, int(-3.9) = -3

(2) int("0b1101", base=2) = 13,base=2表示字符串中的數字以二進制表示

(3) int("hey", base=35) = 21349,base=35表示字符串中的數字以35進制表示,這裏的有效base範圍為2~36(10+26)

2. 數學運算

abs:函數返回數字的絕對值。

divmod:計算除數與被除數的結果,返回一個包含商和余數的元組(a // b, a % b)。

round:保留浮點數的小數位數,默認保留整數。

pow:求x**y次冪。(三個參數為x**y的結果對z取余)

技術分享圖片
print(abs(-5))  # 5

print(divmod(7,2))  # (3, 1)

print(round(7/3,2))  # 2.33
print(round(7/3))  # 2
print(round(3.32567,3))  # 3.326

print(pow(2,3))  # 兩個參數為2**3次冪
print(pow(2,3,3))  # 三個參數為2**3次冪,對3取余。
View Code

sum:對可叠代對象進行求和計算(可設置初始值)。

min:返回可叠代對象的最小值(可加key,key為函數名,通過函數的規則,返回最小值)。

max:返回可叠代對象的最大值(可加key,key為函數名,通過函數的規則,返回最大值)。

技術分享圖片
print(sum([1,2,3]))
print(sum((1,2,3),100))

print(min([1,2,3]))  # 返回此序列最小值

ret = min([1,2,-5,],key=abs)  # 按照絕對值的大小,返回此序列最小值
print(ret)

dic = {a:3,b:2,c:1}
print(min(dic,key=lambda x:dic[x]))
# x為dic的key,lambda的返回值(即dic的值進行比較)返回最小的值對應的鍵


print(max([1,2,3]))  # 返回此序列最大值

ret = max([1,2,-5,],key=abs)  # 按照絕對值的大小,返回此序列最大值
print(ret)

dic = {a:3,b:2,c:1}
print(max(dic,key=lambda x:dic[x]))
# x為dic的key,lambda的返回值(即dic的值進行比較)返回最大的值對應的鍵
View Code

3. 數據結構

總結

技術分享圖片

匿名函數

來看一個函數

def func(x, y):
    return x + y

print(func(3, 4))

像這樣函數體只有return語句的函數可以改寫成一行的匿名函數(lambda),如下

func2 = lambda x, y: x + y

下面來寫一個匿名函數,傳入三個參數,返回三個數相乘的結果

func = lambda x, y, z: x*y*z

總結一下,匿名函數的特點:

1. 只有返回值的函數可以用lambda函數代替

2. 匿名函數只能用一行

3. 匿名函數的語法為lambda 參數1,參數2,... : 返回值

4. 匿名函數多與內置函數相結合

需要註意的是匿名函數在內存中只有一個,下面來看一個例子

v = [lambda:x for x in range(10)]
print(v)
print(v[0])
print(v[0]())

執行結果

技術分享圖片
[<function <listcomp>.<lambda> at 0x000001DAFD64B950>, <function <listcomp>.<lambda> at 0x000001DAFD64BA60>, <function <listcomp>.<lambda> at 0x000001DAFD64B9D8>, <function <listcomp>.<lambda> at 0x000001DAFD64BAE8>, <function <listcomp>.<lambda> at 0x000001DAFD64BB70>, <function <listcomp>.<lambda> at 0x000001DAFD64BBF8>, <function <listcomp>.<lambda> at 0x000001DAFD64BC80>, <function <listcomp>.<lambda> at 0x000001DAFD64BD08>, <function <listcomp>.<lambda> at 0x000001DAFD64BD90>, <function <listcomp>.<lambda> at 0x000001DAFD64BE18>]
<function <listcomp>.<lambda> at 0x000001DAFD64B950>
9
View Code

為什麽會出現這種結果呢,因為lambda只有一個,實際上添加到列表v裏面的是同一個lambda,上述代碼相當於

v = []
for x in range(10):
    func1 = lambda: x
    v.append(func1)

python 內置函數與匿名函數