函數之三元表達式,遞歸,匿名函數,內置函數
阿新 • • 發佈:2018-04-02
導致 pass 直接 是否 div 通過 pen hid 沒有
三元表達式
條件成立會返回一個值,不成立會返回一個值
def func(x,y): if x>y: return x else: return y res=x if x > y else y #三元表達式 print(res)
列表推導式,生成器表達式
# 列表推導式
egg_list=[] for i in range(10): egg_list.append(‘雞蛋%s‘ %i) egg_list=[‘雞蛋%s‘ %i for i in range(10)]
# 將列表推導式的 [ ] 換成 () 就是生成器表達式
列表推倒式比較直觀、占內存
生成器表達式不容易看出內容,省內存
[變量(加工的變量)for 變量i in 可叠代的數據類型] 列表推導式 # 循環模式
[變量(加工後的數據)for 變量i in 可叠代的數據類型 if 條件] 列表的推導式 # 篩選模式
遞歸
函數的遞歸即在調用的過程當中,又直接或間接地調用了函數本身
遞歸分為兩個階段
1、回溯(一定要在滿足某種條件下,結束回溯,否則會無限遞歸)
2、遞推
def salary(n): if n == 1: return 100 return salary(n-1)+300 print(salary(5))# salary(5)=salary(4)+300 # salary(4)=salary(3)+300 # salary(3)=salary(2)+300 # salary(2)=salary(1)+300 # salary(1)=100 # 回溯 # salary(n)=salary(n-1)+300 n>1 # salary(1) =100 n=1 # 遞推
總結:
1、遞歸一定要有一個明確的結束條件
2、每進入下一次遞歸,問題的規模都應該減少
3、在python中沒有尾遞歸優化
4、遞歸效率不高,遞歸層次過多會導致棧溢出
匿名函數(不會單獨使用)
1、匿名的目的就是沒有名字,給匿名函數賦給一個名字是沒有意義的
2、匿名函數的參數規則,作用域關系與有名函數是一樣的
3、匿名函數的函數體通常應該是一個表達式,該表達式必須要有一個返回值
# f =lambda x,n:x ** n # print(f(3,3)) # 因為匿名函數最重要的一點就是沒有名字,所以這種賦值是沒有意義的 def func(x,y,z) return x+y+z lambda x,y,z: x+y+z #匿名函數
匿名函數與有名函數的對比
有名函數:循環使用,保存了名字,通過名字就可以重復引用函數功能
匿名函數:一次性使用,隨時隨時定義
lambda 匿名函數的應用
# map 映射 names=[‘alex‘,‘wxx‘,‘yuanhao‘,‘egon‘] res=map(lambda x:x+‘_nb‘if x==‘egon‘else x+‘_sb‘,names) print(list(res)) # reduce from functools import reduce l=[‘my‘,‘name‘,‘is‘,‘alex‘] res = reduce(lambda x,y:x+‘ ‘+y,l) print(res) # filter 過濾,成功 True,否則 False # names=[‘alex_sb‘,‘wxx_sb‘,‘egon‘] # res=filter(lambda x:x.endswith(‘_sb‘),names) # print(list(res))
內置函數
# print(abs(-1)) # print(all([1,‘a‘,True])) # 列表中所有元素的布爾值為真,最終結果才為真 # print(all(‘‘)) # 傳給all的可叠代對象如果為空,最終結果為真 # print(any([0,‘‘,None,False])) #列表中所有元素的布爾值只要有一個為真,最終結果就為真 # print(any([])) # 傳給any的可叠代對象如果為空,最終結果為假 # print(bin(11)) #十進制轉二進制 # print(oct(11)) #十進制轉八進制 # print(hex(11)) #十進制轉十六進制 # print(bool(0)) #0,None,空的布爾值為假 # res=‘你好egon‘.encode(‘utf-8‘) # unicode按照utf-8進行編碼,得到的結果為bytes類型 # res=bytes(‘你好egon‘,encoding=‘utf-8‘) # 同上 # print(res) # def func(): # pass # print(callable(‘aaaa‘.strip)) #判斷某個對象是否是可以調用的,可調用指的是可以加括號執行某個功能 # print(chr(90)) #按照ascii碼表將十進制數字轉成字符 # print(ord(‘Z‘)) #按照ascii碼表將字符轉成十進制數字 # print(dir(‘abc‘)) # 查看某個對象下可以用通過點調用到哪些方法 # print(divmod(1311,25)) # 1311 25 # 將字符內的表達式拿出運行一下,並拿到該表達式的執行結果 # res=eval(‘2*3‘) # res=eval(‘[1,2,3,4]‘) # res=eval(‘{"name":"egon","age":18}‘) # print(res,type(res))部分內置函數用法
函數之三元表達式,遞歸,匿名函數,內置函數