1. 程式人生 > >python基礎之內建函式與匿名函式

python基礎之內建函式與匿名函式

python基礎之內建函式與匿名函式

 

內建函式68個如下圖

 

重點的關注的內建函式len,sorted,enumerate,all,any,zip,filter,map,reversed,slice      

 

len(o):引數為O,返回資料型別的長度
sorted():      sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
      iterable:是可迭代型別; cmp:用於比較的函式,比較什麼由key決定;


      key:用列表元素的某個屬性或函式進行作為關鍵字,有預設值,迭代集合中的一項
      reverse:排序規則. reverse = True 降序 或者 reverse = False 升序,預設升序。
      返回值:返回一個排序後的列表(字典是按鍵值排序後的元組組成的列表)
      常用在字典排序,按鍵排序或者按值排序
enumerate(): 列舉,獲取可迭代物件的索引值

 

all():用於判斷給定的可迭代引數 iterable 中的所有元素是否都為 TRUE,如果是返回 True,
   否則返回 False。元素除了是 0、空、FALSE 外都算 TRUE。
any():判斷x物件是否為空物件,如果都為空、0、false,則返回false,如果不都為空、0、false,則返回true
zip():接受任意多個(包括0個和1個)序列作為引數,返回一個tuple列表,
reversed():反轉
slice():切片
map():接收一個函式 f 和一個 list,並通過把函式 f 依次作用在 list 的每個元素上,得到一個新的 list 並返回
filter():接收一個函式 f 和一個list,這個函式 f 的作用是對每個元素進行判斷,返回 True或 False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。

內建函式的練習sorted,enumerate,zip,filter,map,reversed,slice

#字典排序
'''
原理:
1.按健排序   dict_keys
2.按值排序   dict_values
3.按鍵值中的健或值排序   dict_items ,將鍵值轉為元組存在list,key選擇按第一個還是第二個排序。
'''
dic = {'a':2,'b':4,'f':7,'d':6,'e':8}
print(dic.keys())    #dict_keys(['a', 'b', 'd', 'e'])
print(dic.values())  #dict_values([2, 4, 6, 8])
print(dic.items()) #dict_items([('a', 2), ('b', 4), ('d', 6), ('e', 8)]) li3 = sorted(dic.keys(),) #['a', 'b', 'd', 'e', 'f'] li4 = sorted(dic.values()) #[2, 4, 6, 7, 8] li5 = sorted(dic.items(),key=lambda x:x[0]) #[('a', 2), ('b', 4), ('d', 6), ('e', 8), ('f', 7)] #enumerate:獲取可迭代物件中元素的索引值, l = [3,5,6,2,9,'q','w','c'] for index,k in enumerate(l): print('index = %s,k = %s'%(index,k)) ''' 列印: index = 0,k = 3 index = 1,k = 5 index = 2,k = 6 index = 3,k = 2 index = 4,k = 9 index = 5,k = q index = 6,k = w index = 7,k = c ''' #zip將兩個或者多個可迭代物件相同的索引值取到一起,返回一個zip object,需要for迴圈取值 l = [4,3,6,5] l1 = ['q','w','e'] l_li = zip(l,l1) print(l_li) for i in l_li: print(i) ''' i遍歷為: (4, 'q') (3, 'w') (6, 'e') ''' #filter # 格式 def func(i): return i%2 ==0 li6 =list(filter(func,range(10))) #[0, 2, 4, 6, 8] 滿足留下,不滿足捨去 print(li6) # map map(func,iter):iter經func後返回一個物件 def pow2(i): return i*i l =[1,2,3,6,5,7] li7 = list(map(pow2,l)) print(li7) #[1, 4, 9, 36, 25, 49],map(func,L)

 

匿名函式

函式名 = lambda 引數 :返回值

#引數可以有多個,用逗號隔開
#匿名函式不管邏輯多複雜,只能寫一行,且邏輯執行結束後的內容就是返回值
#返回值和正常的函式一樣可以是任意資料型別


add = lambda x,y:x+y
print(add(3,4))

 

 

習題:

求10-100000內每位加起來等於5的數,如14,23。。。。10023等,

請先思考再看答案,提示:可以先寫個分解函式,將拆分的數字家和為5的篩選出來。這是基礎的

#第一種常規解法
def split_num(i):
    strnum = str(i)
    sum = 0
    for i in strnum:
        i =int(i)
        sum += i
    return sum
num_list = []
for i in range(10,100000):
    nums = split_num(i)
    if nums == 5:
        num_list.append(i)
for i in num_list:
    print('%5s'%i,end=',')
    if (num_list.index(i)+1)%10 == 0:
        print()
print('\n總計有%s個'%len(num_list))
#充分利用內建函式
ls = [x for x in range(10,100000) if sum(map(int,str(x)))==5]
for k,v in enumerate(ls):
    print('%5s'%v,end=',')
    if (k+1) % 10 == 0 :
        print()
print('\n總共有%s個'%len(ls))
View Code