Chapter 3 Python函數與條件

3.1 函數基本寫法

def 函數名稱(input1,input2=value,*input3,**input4): 

  /* 程序每行「內縮2格」 */

  return ...

input1:無預設值的input

input2:有預設值的input

*input3:將「無」keyword的arguments合成tuple物件input3。

**input4:將「有」keyword的arguments合成dictionary物件input4。

3.2 條件

3.2.1 Block statement

if condition1:
    body1
elif condition2:
    body2
elif condition3:
    body3
.
.
.
elif condition(n-1):
    body(n-1)
else:
    body(n)

body部份要內縮(indentation):

  • One or more whitespace characters (spaces or tabs) is sufficient to serve as indentation.
  • A given indented block must use a uniform level of indentation. E.g. if the first line of an indented block has two leading spaces, all subsequent lines in that block must lead with exactly two white spaces.

範例

\[f(x)=1/x\]
1. Domain \(D_1=(1,2)\).
2. Domain \(D_2 =[1,2]\).

()不包含界限;[]包含

範例

\[\begin{array}{lcl} f1(x) &=& \begin{cases} +x^2 &\quad x≥0,\\ -x^2 &\quad -1<x<0 \end{cases} \\ f2(x) &=& \begin{cases} x^3 &\quad x<0,\\ 3x-2 &\quad 2>x\geq0 \end{cases} \end{array}\]

3.3 local and global

對多數程式語言,當函數使用到input argument所沒有的物件時,它會去global environment找。

function被call時會開啟一個環境,叫executive environment,在裡面執行函數程序,中間如果有創造出任何物件(如localC)會存活在executive environment,然而函數程序完成後整個executive environment會刪除,裡面的物件除非有return,否則值(這裡的"two")就消失了。

function input(比如叫x)若是直接來自global variable(比如叫global1),它相當於是在做x=global1的定義式複製。如果global1是mutable,要小心函數裡對x值的更改會動到global1

3.4 視函數為元素

函數本身也是個物件,所以也可以當元素值儲存

當有一群函數時,可以以dictionary方式存:

注意,Python dictionary才可額外「用index或key」增加不存在原始定義的元素,如果用list就不行;list得使用append method,且list無法給元素名稱。

3.5 Anonymous函數

函數很小時可使用anonymous function寫法,或稱為lambda

lambda input_arguments : expression

相當於

唯一不同是上述lambda用法該行執行完後此函數就消失了,無法再呼叫使用。若想再呼叫使用,可用以下寫法: