一、三元表達式 三元表達式僅應用於: 1、條件成立返回一個值 2、條件不成立返回一個值 res=x if x > y else y print(res) 二、函數遞歸 定義:函數的遞歸調用,即在函數調用的過程中,又直接或間接地調用了函數本身 1、直接調用 2、間接調用 遞歸分為兩個階段 1、回溯: ...
一、三元表達式
1 def max2(x,y): 2 if x>y: 3 return x 4 else: 5 return y 6 res=max2(10,11) 7 print(res)
三元表達式僅應用於:
1、條件成立返回一個值
2、條件不成立返回一個值
res=x if x > y else y
print(res)
1 def max2(x,y): 2 return x if x > y else y 3 print(max2(10,11))
二、函數遞歸
定義:函數的遞歸調用,即在函數調用的過程中,又直接或間接地調用了函數本身
1、直接調用
1 def foo(): 2 print('from foo') 3 foo() 4 foo()
2、間接調用
1 def bar(): 2 print('from bar') 3 foo() 4 5 def foo(): 6 print('from foo') 7 bar() 8 foo()
遞歸分為兩個階段
1、回溯:
註意:一定要在滿足某種條件回溯,否則無限遞歸
2、遞推
總結:
1、遞歸一定要有一個明確的結束條件;
2、每進入下一次遞歸,問題的規模都應該相應減少;
3、在python中沒有尾遞歸優化;
1 def age(n): 2 if n == 1: 3 return 18 4 return age(n-1)+2 #age(1)+2+2+2+2 5 6 print(age(5))
例:items=[1,[2,[3,[4,[5,[6,[7,[8,[9,[10,]]]]]]]]]],利用遞歸取出嵌套列表內10。
1 items=[1,[2,[3,[4,[5,[6,[7,[8,[9,[10,]]]]]]]]]] 2 def tell(l): 3 for item in l: 4 if type(item) is not list: 5 print(item) 6 else: 7 tell(item) 8 print(tell(items))
三、匿名函數
1 def foo(x,n): #foo=函數的記憶體地址 2 return x ** n 3 4 f=lambda x,n:x ** n 5 print(f(2,3))
強調:
1、匿名的目的就是要沒有名字,給匿名函數賦給一個名字是沒有意義的;
2、匿名函數的參數規則、作用域關係與有名函數是一樣的;
3、匿名函數的函數體通常應該是一個表達式,該表達式必須要有一個返回值;
lambda x,y:x+y
lambad匿名函數的應用:
#max,min,sorted,map,filter
1 info=[ 2 {'name':'egon','age':'18','salary':'3000'}, 3 {'name':'wxx','age':'28','salary':'1000'}, 4 {'name':'lxx','age':'38','salary':'2000'} 5 ] 6 # 計算出最大值 7 res=max(info,key=lambda dic:int(dic['salary'])) 8 9 # 計算出最小值 10 res=min(info,key=lambda dic:int(dic['salary'])) 11 12 # 進行排序 13 res=sorted(info,key=lambda dic:int(dic['salary'])) 14 15 # 為真則生成新的列表 16 res=map(lambda x:x**2,[1,2,3,4]) 17 18 # 找出大於2的數字 19 res=filter(lambda x:x > 2,[1,2,3,4]) 20 21 22 23 print(list(res))
四、內置函數
1 print(abs(-1)) 2 print(all([1,'a',True])) # 列表中所有元素的布爾值為真,最終結果才為真 3 print(all('')) # 傳給all的可迭代對象如果為空,最終結果為真 4 5 print(any([0,'',None,False])) #列表中所有元素的布爾值只要有一個為真,最終結果就為真 6 print(any([])) # 傳給any的可迭代對象如果為空,最終結果為假 7 8 print(bin(11)) #十進位轉二進位 9 print(oct(11)) #十進位轉八進位 10 print(hex(11)) #十進位轉十六進位 11 12 print(bool(0)) #0,None,空的布爾值為假 13 14 res='你好egon'.encode('utf-8') # unicode按照utf-8進行編碼,得到的結果為bytes類型 15 res=bytes('你好egon',encoding='utf-8') # 同上 16 print(res) 17 18 def func(): 19 pass 20 print(callable('aaaa'.strip)) #判斷某個對象是否是可以調用的,可調用指的是可以加括弧執行某個功能 21 22 print(chr(90)) #按照ascii碼表將十進位數字轉成字元 23 print(ord('Z')) #按照ascii碼表將字元轉成十進位數字 24 25 26 print(dir('abc')) # 查看某個對象下可以用通過點調用到哪些方法 27 28 print(divmod(1311,25)) # 1311 25 29 30 # 將字元內的表達式拿出運行一下,並拿到該表達式的執行結果 31 res=eval('2*3') 32 res=eval('[1,2,3,4]') 33 res=eval('{"name":"egon","age":18}') 34 print(res,type(res)) 35 # 36 with open('db.txt','r',encoding='utf-8') as f: 37 s=f.read() 38 dic=eval(s) 39 print(dic,type(dic)) 40 print(dic['egon']) 41 42 43 s={1,2,3} 44 s.add(4) 45 print(s) 46 47 # 不可變集合 48 fset=frozenset({1,2,3}) 49 50 x=111111111111111111111111111111111111111111111111111111111111111111111111111111111111 51 print(globals()) # 查看全局作用域中的名字與值的綁定關係 52 print(dir(globals()['__builtins__'])) 53 def func(): 54 x=1 55 print(locals()) 56 func() 57 print(globals()) 58 59 # 字典的key必須是不可變類型 60 dic={[1,2,3]:'a'} 61 # 不可hash的類型list,dict,set== 可變的類型 62 # 可hash的類型int,float,str,tuple == 不可變的類型 63 hash() 64 65 def func(): 66 """ 67 幫助信息 68 :return: 69 """ 70 pass 71 72 print(help(max)) 73 74 75 len({'x':1,'y':2}) #{'x':1,'y':2}.__len__() 76 77 obj=iter('egon') #'egon'.__iter__() 78 print(next(obj)) #obj.__next__()