Python函數編程——嵌套&匿名&高階函數

Python函數編程——嵌套&匿名&高階函數

1、嵌套函數

函數裏不只能夠寫代碼,還能夠嵌套函數:python

name = "小猿圈"
def change():
    name = "小猿圈,自學編程"
    def change2():
        # global name  若是聲明瞭這句,下面的name改的是最外層的全局變層
        name = "小猿圈,自學編程不要錢" #這句註釋掉的話,下面name打印的是哪一個值?
        print("第3層打印", name) 
    change2()  # 調用內層函數
    print("第2層打印", name)
change()
print("最外層打印", name)

輸出編程

第3層打印 小猿圈,自學編程不要錢
第2層打印 小猿圈,自學編程
最外層打印 小猿圈

經過上面的例子,咱們理解了,每一個函數裏的變量是互相獨立的,變量的查找順序也是從當前層依次往上層找。函數

問個哲學問題,這東西有什麼用呢?哈,如今沒用,不解釋,長大後學了裝飾器你就知道有啥用了。code

2、匿名函數

匿名函數就是不須要顯式的指定函數名ip

#這段代碼
def calc(x,y):
    return x**y
print(calc(2,5))
#換成匿名函數
calc = lambda x,y:x**y
print(calc(2,5))

你也許會說,用上這個東西沒感受有毛方便呀, 。。。。呵呵,若是是這麼用,確實沒毛線改進,不過匿名函數主要是和其它函數搭配使用的呢,以下get

res = map(lambda x:x**2,[1,5,7,4,8])
for i in res:
    print(i)

輸出class

1
25
49
16
64

3、高階函數

變量能夠指向函數,函數的參數能接收變量,那麼一個函數就能夠接收另外一個函數做爲參數,這種函數就稱之爲高階函數。匿名函數

def get_abs(n):
    if n < 0 :
        n = int(str(n).strip("-"))
    return n
def add(x,y,f):
    return f(x) + f(y)
res = add(3,-6,get_abs)
print(res)

只需知足如下任意一個條件,便是高階函數:變量

  • 接受一個或多個函數做爲輸入。
  • return 返回另一個函數。
相關文章
相關標籤/搜索