Python學習(13)--Lambda表示式和switch語句的實現
Python學習(13)--Lambda表示式和switch語句的實現
1.Lambda表示式定義匿名函式
- def f(x,y):
- return x*y
- g=lambda x,y:x*y
- print(g(2,3))
如上所示,開始我們定義了一個常見的函式f(x,y),這個函式的功能很簡單,就是返回兩個形式引數x和y的乘積,函式的名字為f。lambda x,y:x*y一句就定義了一個極簡的函式,這個函式是匿名的,引數列表為x和y,返回值就是x*y,不需要特定的return語句返回,lambda表示式返回的是一個函式物件,這個函式物件我們用g來接收它,當呼叫這個函式時,也是用g這個函式物件來呼叫,如g(2,3)就是呼叫lambda表示式返回的函式。以下是對一個lambda表示式各個部分的詳細註解.
- g=lambda x,y:x*y;
- print(g)
如上我們通過lambda表示式構造了一個匿名函式物件並列印它,列印結果如下:
- def f(n):
- if n==0:
- return 1
- else:
- return n*f(n-1)
- print(f(5))
程式碼的列印結果如下:
- from functools import reduce
- l={1,2,3,4,5}
- f=lambda x,y:x*y
- result=reduce(f,l)
- print(result)
程式碼的執行結果與上圖是一樣的,我們主要講解下lambda表示式起到的作用與reduce函式的功能.
- def add(x,y):
- return x+y
- def subtract(x,y):
- return x-y
- def mul(x,y):
- return x*y
- def divide(x,y):
- return x/y
- def operator(o,x,y):
- if o=='+':
- print(add(x,y))
- elif o=='-':
- print(subtract(x,y))
- elif o=='*':
- print(mul(x,y))
- elif o=='/':
- print(divide(x,y))
- else:
- pass
- operator('/', 5, 2)
如上程式碼所示,我們實現了一個簡單的計算器程式,程式的主要功能是計算兩個數的加減乘除運算,4個函式add(x,y),subtract(x,y),mul(x,y),divide(x,y)分別實現加減乘除運算,函式operator(o,x,y)是使用if...elif...else結構實現switch語句,通過多級判斷使用者運算子,呼叫相應的函式,實現簡單的計算器功能.
- def add(x,y):
- return x+y
- def subtract(x,y):
- return x-y
- def mul(x,y):
- return x*y
- def divide(x,y):
- return x/y
- print(add)
- print(subtract)
- print(mul)
- print(divide)
程式碼執行結果如下:
- operator={'+':add,'-':subtract,'/':divide,'*':mul}
- print(operator['+'](5,2))
- print(add(5,2))
如上程式碼所示,我們初始化字典時,把運算子作為字典的鍵,而函式物件作為字典的值,這樣我們就可以通過字典的鍵,也就是運算子,獲取到相應的函式物件,並呼叫這個函式物件,比如operator['+'],我們獲取到了函式物件add,即operator['+']==add,而通過函式物件呼叫函式時,add(5,2)與operator['+'](5,2)是等價的,列印結果如下:
- def add(x,y):
- return x+y
- def subtract(x,y):
- return x-y
- def mul(x,y):
- return x*y
- def divide(x,y):
- return x/y
- operator={'+':add,'-':subtract,'/':divide,'*':mul}
- def fun(o,x,y):
- print(operator.get(o)(x,y))
- fun("/",5,2)
我們定義了一個函式fun(o,x,y),形參o為運算子,x和y為運算元,operator.get(o)(x,y),就是通過運算子獲取字典裡初始化好的函式物件,並呼叫函式實現運算,這樣就實現了switch語句,避免了之前if...elif...else結構需要多重判斷耗費記憶體的問題,真正實現一步到位,並且把資料部分與運算部分分割開來,程式碼的可讀性更強。
相關文章
- C#3.0之神奇的Lambda表示式和Lambda語句C#
- 笨辦法學C 練習13:Switch語句
- Python學習筆記 - lambda表示式Python筆記
- 最近學習到的Lambda表示式
- Java學習之分支結構---判斷語句:if語句和switch語句Java
- JDK1.8 Lambda 表示式的學習JDK
- <七>lambda表示式實現原理
- Java Lambda 表示式學習筆記Java筆記
- 【Python】python map()函式和lambda表示式Python函式
- Python - lambda 表示式Python
- Python Lambda 表示式Python
- 《Think Python 2e》作業實現(二): 變數、表示式和語句Python變數
- java8學習:lambda表示式(2)Java
- java8學習:lambda表示式(1)Java
- 物聯網學習教程——switch語句
- Python中表示式與語句Python
- Python的運算物件、運算子、表示式和語句Python物件
- Python中lambda表示式的語法與應用Python
- js 學習之路7:switch/case語句的使用JS
- Swift學習筆記(二十七)——條件語句和Switch-case語句Swift筆記
- C#中的Lambda表示式和表示式樹C#
- C++11 學習筆記 lambda表示式筆記
- Java 8 Lambda 表示式學習心得總結Java
- Python中lambda表示式的用法Python
- 利用 Lambda 表示式實現 Java 中的惰性求值Java
- 從五大語言看函式和lambda表示式函式
- [轉]Java 8 的 lambda 表示式 Java 8 的 lambda 表示式Java
- kotlin 函式和 Lambda 表示式Kotlin函式
- 5.函式和lambda表示式函式
- Matlab的if語句switch語句for迴圈while迴圈語句練習MatlabWhile
- lambda 表示式
- lambda表示式
- python closure閉包 lambda表示式Python
- Python3之lambda表示式Python
- Java8 新語法習慣 (級聯 lambda 表示式)Java
- Java的Lambda表示式Java
- cpp的lambda表示式
- switch語句的妙用