2020年9月15日星期二

[課後作業] 第021講:函數:lambda表達式|課後測試題及答案

[課後作業] 第021講:函數:lambda表達式|課後測試題及答案 




《零基礎入門學習Python》視頻下載地址:傳送門
   
測試題:
      
0.請使用lambda表達式將下邊函數轉變為匿名函數?
  1. def fun_A(x, y=3):
  2.         return x * y
複製代碼

1. 請將下邊的匿名函數轉變為普通的屌絲函數?
  1. lambda x : x if x % 2 else None
複製代碼

2.感受一下使用匿名函數後給你的編程生活帶來的變化?


3.你可以利用filter()和lambda表達式快速求出100以內所有3的倍數嗎?


4.還記得列表推導式嗎?完全可以使用列表推導式代替filter()和lambda組合,你可以做到嗎?


5.還記得zip嗎?使用zip會將兩數以元祖的形式綁定在一塊,例如:

  1. >>> list(zip([1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
  2. [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
複製代碼
但如果我希望打包的形式是靈活多變的列表而不是元祖(希望是[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]這種形式),你能做到嗎?(採用map和lambda表達式)


6.請目測以下表達式會打印什麼?
  1. def make_repeat(n):
  2.         return lambda s : s * n

  3. double = make_repeat(2)
  4. print(double(8))
  5. print(double('FishC'))
複製代碼


回复您的答案即可查看參考答案!


      
測試題答案:
   

本帖隱藏的內容

0. 請使用lambda表達式將下邊函數轉變為匿名函數?
  1. def fun_A(x, y=3):
  2.         return x * y
複製代碼

答:
  1. lambda x, y=3 : x * y
複製代碼


1. 請將下邊的匿名函數轉變為普通的屌絲函數?
  1. lambda x : x if x % 2 else None
複製代碼

答:
  1. def is_odd(x):
  2.         if x % 2:
  3.                 return x
  4.         else:
  5.                 return None
複製代碼


2.感受一下使用匿名函數後給你的編程生活帶來的變化?


答:
a. Python寫一些執行腳本時,使用匿名函數就可以省下定義函數過程,比如說我們只是需要寫個簡單的腳本來管理服務器時間,我們就不需要專門定義一個函數然後再寫調用,使用匿名函數就可以使得代碼更加精簡。

b.對於一些比較抽象並且整個程序執行下來只需要調用一兩次的函數,有時候給函數起個名字也是比較頭疼的問題,使用匿名函數就不需要考慮命名的問題了。

c.簡化代碼的可讀性,由於普通的屌絲函數閱讀經常要跳到開頭def定義部分,使用匿名函數函數可以省去這樣的步驟。

【小甲魚溫馨提示:知道就行,千萬別去背^_^】


3.你可以利用filter()和lambda表達式快速求出100以內所有3的倍數嗎?

答:
  1. list(filter(lambda n : not(n%3), range(1, 100)))
複製代碼


4.還記得列表推導式嗎?完全可以使用列表推導式代替filter()和lambda組合,你可以做到嗎?


答:例如將第3題轉為列表推導式即:
  1. [ i for i in range(1, 100) if not(i%3)]
複製代碼


5. 還記得zip嗎?使用zip會將兩數以元祖的形式綁定在一塊,例如:
  1. >>> list(zip([1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
  2. [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
複製代碼

但如果我希望打包的形式是靈活多變的列表而不是元祖(希望是[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]這種形式),你能做到嗎?(採用map和lambda表達式)
  1. >>> list(map(lambda x, y : [x, y], [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
  2. [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
複製代碼
注意:強大的map()後邊是可以接受多個序列作為參數的。


6.請目測以下表達式會打印什麼?
  1. def make_repeat(n):
  2.         return lambda s : s * n

  3. double = make_repeat(2)
  4. print(double(8))
  5. print(double('FishC'))
複製代碼

會打印:
16
FishCFishC

7.請寫下這一節課你學習到的內容:格式不限,回憶並複述是加強記憶的好方式!

小甲魚希望你認真對待作業就像你希望小甲魚推出高質量視頻一樣渴望^_^

這節課只要來討論一下lambda表達式,Python允許使用lambda表達式創建匿名函數,那什麼是匿名函數呢?
Python的lambda語句是非常精簡的,基本的語法就是在冒號的前面是原函數的參數,而在冒號的後邊是原函數的返回值。lambda語句實際上是構建了一個函數對象,如果要對它進行使用,只需要簡單的賦值即可。
lambda語句構建的函數的參數也可以是多個的
(2)lambda表達式的作用
Python寫一些執行腳本時,使用lambda就可以省下定義函數的過程,比如說我們只是需要寫個簡單的腳本來管理服務器時間,我們就不需要專門定義一個函數然後再寫調用,使用lambda就可以使得代碼更加精簡。
對於一些比較抽象並且整個程序執行下來只需要調用一兩次的函數,有時候給函數起個名字也是比較頭痛的問題,使用lambda就不需要考慮命名的問題了。
簡化代碼的可讀性,由於普通的屌絲函數閱讀經常要跳到開頭def定義部分,使用lambda函數可以省去這樣的步驟。
(3)兩個牛逼的BIF
  • filter()
用法:filter(function or None, iterable),有兩個參數,第二個參數為可迭代的數據,第一個參數可以為None或者函數,當為None時,將iterable中為真的數據挑選出來,當為function時,將iterable中滿足function的結果為真的數據挑選出來。
>>> filter(None, [1, 0, False, True])
           <filter object at 0x00000261C2E3C0B8>
           >>> list( filter(None, [1, 0, False, True]))
           [1, True]
下面寫一個挑選出奇數的代碼:
用lambda實現:
  • map()
用法:map(func, *iterables),將可迭代序列的每一個數據作為函數的參數進行運算加工,直到可迭代序列的每一個元素都加工完畢,返回所有加工後的元素構成的新序列。

0 留言:

發佈留言