1. 程式人生 > >2.7 特殊的函式——遞迴呼叫,和匿名函式

2.7 特殊的函式——遞迴呼叫,和匿名函式

上一章的答案:一張圖片搞定。

1,遞迴函式:自身呼叫自身的函式。【高中數學喜歡玩這個】

例如求n的階乘。已知:1的階乘是1,其他數的階乘都是在1的基礎開始的。

2,匿名函式:懶得取名字的函式。

格式:lambda 引數一個或者多個:表示式 

例子計算a+b的結果 : sum =lambda a,b : a+b 

呼叫方法:sum(10,20) 。#計算10+20

Lambda函式能接收任何數量的引數但只能返回一個表示式的值

匿名函式不能直接呼叫print,因為lambda需要一個表示式

函式作為引數傳遞

  1. 自己定義函式
    >>> def fun(a, b, opt):
    ...     print "a =", a
    ...     print "b =", b
    ...     print "result =", opt(a, b)
    ...
    >>> fun(1, 2, lambda x,y:x+y)
    a = 1
    b = 2
    result = 3
    
  2. 作為內建函式的引數

想一想,下面的資料如何指定按age或name排序?【補充:需要了解一下sort函式的key使用方法3.7版本的官方翻譯】

 

stus = [
    {"name":"zhangsan", "age":18}, 
    {"name":"lisi", "age":19}, 
    {"name":"wangwu", "age":17}
]

按name排序:

>>> stus.sort(key = lambda x:x['name'])
>>> stus
[{'age': 19, 'name': 'lisi'}, {'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}]

按age排序:

>>> stus.sort(key = lambda x:x['age'])
>>> stus
[{'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}, {'age': 19, 'name': 'lisi'}]

簡而言之:就是key對應函式會先被呼叫在列表或者字典中每一項執行一遍。上面的就相當於:首先用匿名函式,每個項都通過鍵來獲取到值,然後給了key,再進行排序。