1. 程式人生 > >day23 內置函數,匿名函數,遞歸

day23 內置函數,匿名函數,遞歸

capi 不可變 類型 匿名 reverse 文件中 [0 規模 大寫

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 內置函數,匿名函數,遞歸