{%hackmd @ZZRT/CSS %} # 函式 包裝程式裡相同的部分 ---- `def`關鍵字 > def func(para) **def** {my_function|函式名稱}({para1, para2|參數}): ---- 以縮排定義函式區塊 ```python def func(): # 函式區塊 ``` ---- 如果想讓參數帶有預設值呢? ```def function(a=0)``` ---- 函式裡的==區域變數==不能被外面使用 ```python def func(): var = 0 print(var) # Error ``` ---- 可以調用外面的函數 但**不能改變** ```python= var = 0 def func(): print(var) # OK var += 1 #Error ``` ```python=4 global var ``` ---- return 回傳值 ```python def func(): return ``` Python的函式可以當作參數傳遞給變數或其他函式 而這種函式也稱為==一級函式== ---- ```python= def func(f): print('call function') return f() def sayHi(): print('hi') func(sayHi) # callfunction # hi ``` ---- <ol class=quiz> Q1. 下列何者是python定義函式的關鍵字 <li data-ans="x">func</li> <li data-ans="x">function</li> <li data-ans="o">def</li> <li data-ans="x">define</li> </ol> ---- Q2. 撰寫一個sum函式 用於相加兩數 :::spoiler 提示1: def sum` `a` ` b` ` ` `   `    ` a+b ::: :::spoiler 提示2: `)` `(` `return` `,` `:` ::: ---- ```python a = 0 def func(): a = 1 func() print(a) ``` <ol class=quiz> Q3. 上述程式會輸出甚麼? <li data-ans="o">0</li> <li data-ans="x">1</li> <li data-ans="x">Error</li> </ol> ---- ```python a = 1 def func(): a -= 1 func() print(a) ``` <ol class=quiz> Q3. 上述程式會輸出甚麼? <li data-ans="x">0</li> <li data-ans="x">1</li> <li data-ans="o">Error</li> </ol> ---- ```python a = 0 def func(): global a a = 1 def func2(): a = 2 func2() func() print(a) ``` <ol class=quiz> Q5. 上述程式會輸出甚麼? <li data-ans="x">0</li> <li data-ans="o">1</li> <li data-ans="x">2</li> </ol> --- ### Lambda 匿名函式 ---- - 簡潔 - 不需要函式名稱 - 適用於小型運算 - 只有1行 - Java, C# 也支援喔~ ---- 使用方法: **lambda** `parameters`**:** `expression` - lambda: key word - parameter: 參數 - expression: 運算式 ---- 使用範例: ``` python power = lambda x, y: x**y; print(power(25, 2)) # 625 ``` ---- 也可以用filter來跑list ``` python a = [1, 2, 3, 4, 5] result = filter(lambda x: x>3, a) print(list(result)) # [4, 5] ``` --- ### 註解 \# 單行註解 """ """ 放在函式的第一行 功能跟多行註解相似 正確名稱是 **多行字串** 它也是字串 可以被`print` 也可以像普通字串一樣操作 特點: 文字都會原封不動的顯示 ---- <ol class=quiz> Q2. 如何註解一段文字? <li data-ans="x">// 註解</li> <li data-ans="o"># 註解</li> <li data-ans="x">/* 註解 */</li> <li data-ans="x">``` 註解 ```</li> <li data-ans="o">''' 註解 '''</li> </ol> --- # 練習題題目咯~~ ---- 給定經過多次對折旋轉的紙的邊長 以對折次數 回推原本的紙張 第一行依序為紙的長(縱)、寬(橫) 接下來有數個動作 1: 上下對折 2: 左右對折 3: 旋轉 直到輸入0代表操作結束 輸出: 以*拼成未經對折的紙張 (後面有測資, 共2頁) ---- ``` 輸入: 1 3 1 1 2 0 輸出: ****** ****** ****** ****** ``` ---- ``` 輸入: 2 3 1 3 1 0 輸出: **** **** **** **** **** **** ``` ---- :::spoiler (點我show答案) ``` python def draw(h,w): print(('*'*w+'\n')*h) height, width = map(int,input().split()) process = [] while True: p = input() if p == '0': break process.append(p) for p in process[::-1]: # 以相反順序回推 if p == '1': height *= 2 elif p == '2': width *= 2 elif p=='3': height, width = width, height draw(height,width) ``` :::
{"metaMigratedAt":"2023-06-16T11:15:03.191Z","metaMigratedFrom":"YAML","title":"Lesson 3","breaks":true,"slideOptions":"{\"transition\":\"fade\",\"parallaxBackgroundImage\":\"https://cdn.discordapp.com/attachments/887196342135451652/889752537513750588/image0.png\",\"parallaxBackgroundSize\":\"2100px 1000px\",\"defaultTiming\":120}","contributors":"[{\"id\":\"35809032-c270-45a6-adab-a7e7a63da25b\",\"add\":3704,\"del\":1384},{\"id\":\"a41c05df-55bf-44dc-9b5f-6e53858b0a77\",\"add\":1063,\"del\":24}]","description":"包裝程式裡相同的部分"}
   changed 3 years ago 263 views
   owned this note