天天看點

python之内置函數、高階函數、匿名函數

内置函數、高階函數、匿名函數

      • 函數式程式設計
      • 高階函數
      • 内置函數
      • 匿名函數

函數式程式設計

  • 在Python中,函數是一等對象
    • 一等對象一般都會具有如下特點:

      ① 對象是在運作時建立的

      ② 能指派給變量或作為資料結構中的元素

      ③ 能作為參數傳遞

      ④ 能作為傳回值傳回

  • 高階函數
    • 高階函數至少要符合以下兩個特點中的一個

      ① 接收一個或多個函數作為參數

      ② 将函數作為傳回值傳回

高階函數

遞歸實際就是一個高階函數

# 建立一個list清單,判斷清單裡的偶數
lst = [1,2,3,4,5,6,7,8,9,10]
def fn(l):
    # 建立一個新清單将我在l清單裡擷取的偶數存在新的清單
    new_list=[]
    # 通過for循環判斷去除偶數
    for n in l:
        if n%2==0:
            new_list.append(n)  # 将偶數添加到new_list新清單中
    return new_list
'''
print(fn(lst))  
# 表示将l清單元素放在函數裡面去調用。滿足了函數自己調用自己的函數
# 将函數fn作為參數傳回就是高階函數
'''
           
  • 高階函數在實際中大量使用,作為函數傳回
  • 利用高階函數可以減少代碼的重用,避免大量的循環判斷語句出現
  • 利用高階函數讓業務代碼塊間顯得更加清晰

内置函數

  • abs()傳回絕對值
num = -1
# abs()傳回絕對值
print(abs(num))  # 1
           
  • sorted(list)排序,傳回排序後的list。

    reverse表示排序方法,true表示倒序,false表示正序。false其實是按照假設的是假條件判斷條件,一般企業直接用true。

    str和int不能同時進行排序.。

# sorted(list)排序,傳回排序後的list
print(sorted([1,2,3,4,5,6,1,1,3],reverse=True))  # [6, 5, 4, 3, 3, 2, 1, 1, 1]
print(sorted(['1','2'],reverse=True))  # ['2', '1']
#sum(list)求取list元素的和
sum([1,2,3,100])
print(sum([1,2,3,100]))  # 106
           
  • round(a,b) 擷取指定位數的小數。

    a代表浮點數,b代表要保留的位數。會進行四舍五入

# round(a,b) 擷取指定位數的小數。
print(round(12.345678,4))  # 12.3457

-  isinstance  類型判斷
- 利用該函數可以更快的判斷類型,不需要使用python解釋器,雖然python是強語言,python解釋器可以自己編譯識别,但是慢。
```python
# isinstance  類型判斷
print(isinstance(1,int))  # True
           
  • eval()執行一個表達式,或字元串作為運算
# eval()執行一個表達式,或字元串作為運算
print(eval('1+1'))  # 2
           
  • exec()輸出python語句
# exec()輸出python語句
exec('print("Python")')  # Python
           
  • execute()預編譯

    對任何計算機語言都有效

匿名函數

定義函數的過程中,沒有給定名稱的函數就叫做匿名函數

Python中使用lambda表達式來建立匿名函數。

lambda 來建立匿名函數規則

●lambda隻是一個表達式,函數體比def簡單很多。

●lambda的主體是一個表達式,而不是一個代碼塊,是以不能寫太多的邏輯進去。

●lambda函數擁有自己的命名空間,且不能通路自有參數清單之外或全局命名空間裡的參數。

●lambda定義的函數的傳回值就是表達式的傳回值,不需要return語句塊

●lambda表達式的主要應用場景就是指派給變量、作為參數傳入其它函數

lambda匿名函數的表達式規則是:lambda 參數清單: 表達式

def fn(a,b):
    return  a+b
fn(1,2) # 普通函數
print((lambda a,b:a+b)(10,20)) #30
           

lambda就是不寫函數名的表達式,經常使用

print(fn(10,20) ) # 通過函數指派的不好之處:python解釋器解釋代碼不利于效率,代碼維護困難。

  • 給一個變量指派(将lambda的值給變量)。将一個變量/常量改變為函數!!
fn1 = (lambda a,b:a+b)
print(fn1(10,20)) # 30
           

不建議使用:變量常量等屬于優先級低的(精度要求),轉化為函數精度優先級高的,造成精度損失。