day23 內置函數,匿名函數,遞歸
Python之路,Day11 = Python基礎11
內置函數
divmod(x, y) # (商, 模)
enumerate(可叠代對象) # (序號,值)
eval(字符串) # 把字符串當成命令執行
set({1,2,3}) # 可變集合(增刪改)
frozenset({1,2,3}) # 不可變集合
globals() # 查看全局變量
locals() # 查看局部變量
isinstance(3, int) # 查看3是不是int類型
pow(3,3) # 3**3
pow(3,3,2) # 3**3 % 2
reversed() # 翻轉
round(3.3456, 3) # 保留3位小數後四舍五入
x = slice(2,5,2) # 獲得一個切片對象
l[x]
上面兩句等同於: l[2:5:2], 但上面定義的 x 可以提供給好多個列表使用
zip():拉鏈函數
s = ‘hello‘
l = [1,2,3,4,5,6]
zip(s,l)
一 一對應,多的就不要了
map:映射,每個元素執行lambda表達式結果
l=[1,2,3,4]
m = map(lambda x:x**2, l)
生成一個叠代器,循環後結果
print(list(m))
>>[1,4,9,16]
reduce:合並
from functools import reduce
reduce(合並規則(func),可叠代對象range(100),初始值)
filter
filter(lambda, 列表) # 打印返回結果為True的值
sorted:排序,沒有改變原來的順序
sorted(list)
sorted(list, reverse=True)
匿名函數
func2 = lambda x:x**2 # 默認return
print( func2(2) )
等同於:
def func(x):
return x**2
print( func1(2) )
遞歸
1.之間或間接調用自己
2.有停止的條件
3.規模應該每次變小
=========================================================
1 文件內容如下,標題為:姓名,性別,年紀,薪資
egon male 18 3000
alex male 38 30000
wupeiqi female 28 20000
yuanhao female 28 10000
要求:
從文件中取出每一條記錄放入列表中,
列表的每個元素都是{‘name‘:‘egon‘,‘sex‘:‘male‘,‘age‘:18,‘salary‘:3000}的形式
2 根據1得到的列表,取出薪資最高的人的信息
3 根據1到的列表,取出最年輕的人的信息
4 根據1得到的列表,將每個人的信息中的名字映射成首字母大寫的形式
5 根據1得到的列表,過濾掉名字以a開頭的人的信息
1 info_list = [{‘name‘:i.split()[0],‘sex‘:i.split()[1], ‘age‘:i.split()[2], ‘salary‘:i.split()[3]} for i in open(‘info‘,encoding=‘utf-8‘)] 2 3 4 print(max(info_list,key=lambda x:x[‘salary‘])) # 最大值 5 print(min(info_list,key=lambda x:x[‘age‘])) # 最小值 6 7 def func1(x): 8 x[‘name‘] = x[‘name‘].capitalize() 9 return x 10 11 # print(list(map(lambda x:x[‘name‘].capitalize(), info_list))) 12 print(list(map(func1, info_list))) 13 14 # 首字母大寫,目測有點問題,等會兒解決下 15 16 17 print(list(filter(lambda x:not x[‘name‘].startswith(‘a‘), info_list)))
# 6 使用遞歸打印j(前兩個數的和得到第三個數)
# 0 1 1 2 3 5 8...
def nbqe(a=0, b=1): if a < 50000: print(a, end=‘ ‘) c = a + b nbqe(b, c) nbqe() # ===================================== l = [0, ] def fbnq(a=0, b=1): l[0] = a return b,a+b a = 0 b = 1 total = 100000 for i in range(total): a, b = fbnq(a, b) print(‘第%s個值為:%s‘%(total, l[-1]))===
day23 內置函數,匿名函數,遞歸