狠狠撸

狠狠撸Share a Scribd company logo
4. 流程语法与函式
4. 流程语法与函式
? 學習目標
– 認識基本流程語法
– 使用 for Comprehension
– 認識函式與變數範圍
– 運用一級函式特性
– 使用 yield 建立產生器
– 初探型態提示
2
if 分支判斷
? 程式區塊使用冒號「:」開頭
? 之後同一區塊範圍要有相同的縮排
– 不可混用不同空白數量,不可混用空白與Tab,
? Python 的建議是使用四個空白作為縮排
3
? if 可以搭配 else
4
? if..elif..else
? if..else 運算式語法
5
while 迴圈
6
? 跟 while 搭配的 else
7
? 若不想讓 else 執行,必須是 while 中因
為 break 而中斷迴圈
8
? 建議別使用 while 與 else 的形式
9
for in 迭代
? 想要循序迭代某個序列
? 使用 range() 函式
10
? 使用 zip() 函式
? 使用 enumerate() 函式
11
? 迭代時具有索引資訊
? 預設 enumerate() 會從 0 開始計數
12
? set 也實作了__iter__()方法,可以進
行迭代
? 想要迭代 dict 鍵值的話,可以使用它的
keys()、values()或 items()方法
13
? for in 也有個與 else 配對的形式
? 建議別使用 for in…else 的形式
14
pass、break、continue
? pass 就真的是 pass,什麼都不做
? break 可用來中斷 while 迴圈、for in
的迭代
? 在 while 迴圈中遇到 continue 的話,此
次不執行後續程式碼,直接進行下次迴圈
15
16
for Comprehension
17
18
? 巢狀結構也是可行,不過建議別太過火
? 取得兩個序列的排列組合:
19
? 在 for Comprehension 兩旁放上(),這
樣的話就會建立一個 generator 物件,具
有惰性求值特性
– sum([n for n in range(1, 10001)])
– sum(n for n in range(1, 10001))
– g = (n for n in range(1, 10001))
20
? 也可以用來建立 set
? 建立 dict 實例
21
? 建立 tuple
? 將 for Comprehension 產生器運算式傳
給 tuple()。
22
使用 def 定義函式
? 發現到程式中…
? 定義函式
? 原先的程式片段就可以修改為:
23
? 函式是一種抽象,對流程的抽象
? 函式也可以呼叫自身,這稱之為遞迴
(Recursion)
24
? 區域函式(Local function)
25
參數與引數
? 不支援函式重載(Overload)
26
? 在 Python 中可以使用預設引數來有限度地
模仿函式重載
27
? 在執行到 def 時,就會依定義建立了相關
的資源
28
? 可以將 prepend() 的 lt 參數預設值設為
None,並在函式中指定真正的預設值
29
? 可以指定參數名稱來設定其引數值,稱之
為關鍵字引數
30
? *與**
31
32
? 可以在一個函式中,同時使用*與**
? 如果想要設計一個函式接受任意引數,就
可以加以運用
33
限定位置參數、關鍵字參數
? Python 3.8新增了Positional-Only
Parameters
? /前的參數必須依定義的位置呼叫,而且不
能採用關鍵字參數的形式來指定
34
? 某些參數的值,也許想限定為只能以關鍵
字參數形式指定
可以在參數列使用*來標示
35
? 在定義參數列時,/與*可以並存
? /之後*之前的參數,可以使用位置參數或關
鍵字參數形式指定
36
一級函式的運用
? 函式不單只是個定義,還是個值,是
function 的實例
37
? 函式跟數值、list、set、dict、tuple
等一樣,都被 Python 視為一級公民來對待
? 可以自由地在變數、函式呼叫時指定,也
被稱一級函式(First-class function)
? 函式代表著某個可重用流程的封裝,這表
示可以將某個可重用流程進行傳遞
38
? 過濾出字串長度大於 6 的元素:
? 可能會多次進行這類的比較,因此定義出
函式,以重用這個流程:
39
40
41
? 想將元素全部轉為大寫後傳回新的清單
42
? Python 就內建有 filter()、map() 函式
可以直接取用
? 傳回的實例並不是 list,分別是 map 與
filter 物件
43
? 有時會想將其中的元素進行排序
? sorted()會傳回新的 list,其中包含了
排序後的結果
? key 參數可用來指定針對什麼特性來迭代
44
? 如果是可變動的 list,本身也有個 sort()
方法,這個方法會直接在 list 本身排序
45
lambda 運算式
? 本體很簡單,只有一句簡單的運算,對於
這類情況,可以考慮使用 lambda 運算式
46
? 若需要兩個以上的參數,中間要使用逗號
「,」區隔
? 結合 dict 與 lambda 來模擬 switch
47
初探變數範圍
? 一個名稱在指定值時,就可以成為變數,
並建立起自己的作用範圍(Scope)
? 在取用一個變數時,會看看目前範圍中是
否有指定的變數名稱,若無則向外尋找
48
? 如果在 func() 中,對名稱 x 作了指定值
的動作呢?
49
? 變數可以在內建、全域、外包函式、區域
函式中尋找或建立
50
? Python 中的全域,實際上是以模組檔案為
? builtins 中的名稱範圍,橫跨各個模組
51
? locals() 函式可用來查詢區域變數名稱
與值。
52
? global() 可以取得全域變數的名稱與值
? 如果對變數指定值時,希望是針對全域範
圍的話,可以使用 global 宣告
53
? 來看看以下這個會發生什麼事情?
54
? 在 Python 3 中新增了nonlocal,可以指
明變數並非區域變數
55
yield 產生器
? 函式並不會因為 yield 而結束,只是將流
程控制權讓給函式的呼叫者
56
? 當函式中使用 yield 指定一個值時,呼叫
該函式會傳回一個 generator 物件
? 該物件具有 __next__()方法,通常會使
用 next() 函式呼叫
? 若無法產生下一個值,則會發生
StopIteration 例外
57
? 可以透過 send() 方法指定值,令其成為
yield 運算結果
58
初探型態提示
? Python 3.5 開始,正式納入了型態提示
(Type Hints)特性
? Python 3.6 更進一步加強了這個特性,並
將 typing 模組納入標準 API
59
? 型態錯誤在執行時期才會呈現出來
? 以 add(1, '2') 呼叫函式,執行時就會
發生 TypeError 錯誤
60
? 編輯上的輔助可能不足
61
? 如果需要調整程式庫之間的呼叫協定變更,
會造成程式庫的客戶端必須進行對應的修
改,問題在於哪些地方需要修改呢?
? 要確認每個被影響到的地方,在執行時期
都能執行到,這必須有覆蓋率高的測試流
程才有可能。
? 你的應用程式在開發時真的會寫測試嗎?
測試的覆蓋率又真的足夠嗎?
62
型態提示語法
? 想令其參數只接受整數型態,並且傳回整
數型態:
? 不宣告傳回值型態:
63
64
? 為底下的 names 變數標註 list:
? typing 模組..
65
? Python 3.9以後,對於內建型態list、
set、tuple、dict等內建型態,可以直
接標明元素型態
66
? 不定長度引數
67
? ** 定義之參數
68
? 如果是個可迭代的物件,例如產生器,可
以使用 Iterator:
? 更精確定義
69
70
? 希望變數值指定後,就不能被修改
? Python 3.8以後,可以透過型態提示
Final來實現這個功能
71
使用 mypy 檢查型態
? 除了使用 IDE 之外,社群中推薦的型態檢
查工具之一是 mypy
? 可以透過 pip 來安裝
? 從Python 3.4 開始就內建了 pip 指令
72
73
? 使用 mypy 進行型態檢查
74
75
76

More Related Content

What's hot (20)

并行与平行
并行与平行并行与平行
并行与平行
Justin Lin
?
型态与运算子
型态与运算子型态与运算子
型态与运算子
Justin Lin
?
从模组到类别
从模组到类别从模组到类别
从模组到类别
Justin Lin
?
5. 建構式、原型與類別
5. 建構式、原型與類別5. 建構式、原型與類別
5. 建構式、原型與類別
Justin Lin
?
CH08:例外处理
CH08:例外处理CH08:例外处理
CH08:例外处理
Justin Lin
?
從 REPL 到 IDE
從 REPL 到 IDE從 REPL 到 IDE
從 REPL 到 IDE
Justin Lin
?
从模组到类别
从模组到类别从模组到类别
从模组到类别
Justin Lin
?
资料永续与交换
资料永续与交换资料永续与交换
资料永续与交换
Justin Lin
?
4. 使用物件
4. 使用物件4. 使用物件
4. 使用物件
Justin Lin
?
颁贬11:执行绪与并行础笔滨
颁贬11:执行绪与并行础笔滨颁贬11:执行绪与并行础笔滨
颁贬11:执行绪与并行础笔滨
Justin Lin
?
进阶主题
进阶主题进阶主题
进阶主题
Justin Lin
?
Java SE 7 技術手冊投影片第 08 章 - 例外处理
Java SE 7 技術手冊投影片第 08 章 - 例外处理Java SE 7 技術手冊投影片第 08 章 - 例外处理
Java SE 7 技術手冊投影片第 08 章 - 例外处理
Justin Lin
?
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
?
12, string
12, string12, string
12, string
ted-xu
?
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
?
open() 與 io 模組
open() 與 io 模組open() 與 io 模組
open() 與 io 模組
Justin Lin
?
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
?
open() 與 io 模組
open() 與 io 模組open() 與 io 模組
open() 與 io 模組
Justin Lin
?
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJava SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
?
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanup
ted-xu
?
型态与运算子
型态与运算子型态与运算子
型态与运算子
Justin Lin
?
从模组到类别
从模组到类别从模组到类别
从模组到类别
Justin Lin
?
5. 建構式、原型與類別
5. 建構式、原型與類別5. 建構式、原型與類別
5. 建構式、原型與類別
Justin Lin
?
CH08:例外处理
CH08:例外处理CH08:例外处理
CH08:例外处理
Justin Lin
?
从模组到类别
从模组到类别从模组到类别
从模组到类别
Justin Lin
?
资料永续与交换
资料永续与交换资料永续与交换
资料永续与交换
Justin Lin
?
颁贬11:执行绪与并行础笔滨
颁贬11:执行绪与并行础笔滨颁贬11:执行绪与并行础笔滨
颁贬11:执行绪与并行础笔滨
Justin Lin
?
Java SE 7 技術手冊投影片第 08 章 - 例外处理
Java SE 7 技術手冊投影片第 08 章 - 例外处理Java SE 7 技術手冊投影片第 08 章 - 例外处理
Java SE 7 技術手冊投影片第 08 章 - 例外处理
Justin Lin
?
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
?
12, string
12, string12, string
12, string
ted-xu
?
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
?
open() 與 io 模組
open() 與 io 模組open() 與 io 模組
open() 與 io 模組
Justin Lin
?
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
?
open() 與 io 模組
open() 與 io 模組open() 與 io 模組
open() 與 io 模組
Justin Lin
?
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJava SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
?
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanup
ted-xu
?

Similar to 4. 流程语法与函式 (7)

Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用APIJava SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin
?
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Justin Lin
?
笔测迟丑辞苍程式精修
笔测迟丑辞苍程式精修笔测迟丑辞苍程式精修
笔测迟丑辞苍程式精修
ITtraining
?
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
?
Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Java SE 7 技術手冊投影片第 03 章 - 基礎語法Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Justin Lin
?
Refactoring with Patterns in PHP
Refactoring with Patterns in PHPRefactoring with Patterns in PHP
Refactoring with Patterns in PHP
Jace Ju
?
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用APIJava SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin
?
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Justin Lin
?
笔测迟丑辞苍程式精修
笔测迟丑辞苍程式精修笔测迟丑辞苍程式精修
笔测迟丑辞苍程式精修
ITtraining
?
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
?
Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Java SE 7 技術手冊投影片第 03 章 - 基礎語法Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Justin Lin
?
Refactoring with Patterns in PHP
Refactoring with Patterns in PHPRefactoring with Patterns in PHP
Refactoring with Patterns in PHP
Jace Ju
?

More from Justin Lin (20)

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
?
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
?
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
?
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
?
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
?
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
?
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
?
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
?
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
Justin Lin
?
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
Justin Lin
?
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
Justin Lin
?
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
?
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
?
14. 进阶主题
14. 进阶主题14. 进阶主题
14. 进阶主题
Justin Lin
?
13.并行、平行与非同步
13.并行、平行与非同步13.并行、平行与非同步
13.并行、平行与非同步
Justin Lin
?
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
?
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
Justin Lin
?
10. 资料永续与交换
10. 资料永续与交换10. 资料永续与交换
10. 资料永续与交换
Justin Lin
?
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
Justin Lin
?
Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
?
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
?
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
?
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
?
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
?
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
?
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
?
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
Justin Lin
?
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
Justin Lin
?
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
?
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
?
13.并行、平行与非同步
13.并行、平行与非同步13.并行、平行与非同步
13.并行、平行与非同步
Justin Lin
?
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
?
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
Justin Lin
?
10. 资料永续与交换
10. 资料永续与交换10. 资料永续与交换
10. 资料永续与交换
Justin Lin
?

4. 流程语法与函式