1. 程式人生 > >函數之三元表達式,遞歸,匿名函數,內置函數

函數之三元表達式,遞歸,匿名函數,內置函數

導致 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+_nbif x==egonelse 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))
部分內置函數用法

函數之三元表達式,遞歸,匿名函數,內置函數