Function
函數 (function) 是一種功能性的程式碼集合,可以將程式 (program) 分割成小部分,藉由呼叫 (call) 函數安排執行順序
呼叫函數的基本方法
https://docs.python.org/3.3/library/functions.html
查詢函數用法 :
呼叫函數的基本方法
Built-in Function
查詢內建函數 (built-in function) : dir(__builtins__)https://docs.python.org/3.3/library/functions.html
查詢函數用法 :
In[76]: help(abs)
Help on built-in function abs in module builtins:
abs(x, /)
Return the absolute value of the argument.
自訂函數
定義函數使用關鍵字 (keyword) def ,其後空一格接函數名稱與小括弧,小括弧用來放參數列 (parameter list) ,函數可以有參數 (parameter) 也可以沒有參數,沒有參數的函數的小括弧留空,另外函數可用 return 設定回傳值 (return value) ,沒有回傳值的函數也就不需要 return 。
函數的命名
- 函數之命名慣例:
- GUI函數習慣以駝峰式(Camel-Case)命名 Ex: GetStudentName()
- 一般函數習慣以小寫或輔以底線命名 Ex: sum_grades()
- 避免非慣用縮寫
- 函數之命名應有意義,且須指出函數之目的或回傳之資料,而非達成目的所使用的方法
Parameter and Argument
參數Parameter
|
引數Argument
|
•函數運行時之參考
•放在函數的標記式,用來說明這個函數,當它被呼叫時必須接收到什麼樣的資料
|
•用以引發函數
•當呼叫函數的時候,可以放在括號內的東西
|
傳遞引數給參數
以引數呼叫函數而將其值賦予參數以供函數(副程式)運行參考
依序一個對一個(只是一個丟接遊戲!), 這種依參數順序給定的引數
稱為positional argument
傳遞的動作可以想像成若干個賦值運算
即:
Pra1 = Arg1
Pra2 = Arg2
…
PraN = ArgN
函數參數傳入的型態有四種
- F(arg1, arg2, ...)
最常見的格式。 - F(arg1, arg2=value2, ...)
在宣告函式的時候,可以先給預設值。 - F(*arg1)
不限參數數量,參數將保存為一個tuple。 - F(**arg1)
不限參數數量,參數將保存為一個dictionary。
函數的回傳值
回傳值可以為:
- 單一的值或 物件
- 多個值或物件所構成的 tuple
- 當未使用 return陳述句時,預設將會回傳None
參數預設值可減少function call撰寫上的麻煩
且自定義函數的參數規則:
- 無預設值之參數在前
- 有預設值之參數在後
因為引數之傳遞是依序的
- 當有預設值之參數仍有引數之分配時,引數值將會取代預設值
範例1:
# (for
迴圈版本)
n =
int(input('Please input n:'))
total
= 0
for i
in range(1,n+1):
total += i # total += i 等價於 total = total + i
print('Total
is:',total)
範例2:
#
(函數版本)
def
sumation(n):
total = 0
for i in range(1,n+1):
total += i # total += i 等價於 total = total + i
print('Total is:',total)
n =
int(input('Please input n:'))
sumation(n)
利用參數名稱之函數呼叫
呼叫函數時不使用參引數依序一對一對應傳遞,而是換成以參數名稱來進行傳遞與函式之呼叫(名稱呼叫)。這種依名稱傳遞的引數稱為 keyword argument。
函數 (function) 可以有不定個數的參數 (parameter),也就是可以在參數列 (paramenter list) 提供任意長度的參數個數
*arguments 就是參數識別字 (identifier) 前面加上一個星號,當成一組序對 (tuple)。
**keywords 參數識別字前面加上兩個星號,當成一組字典(dictionary)。
Yield產生器
函數 (function) 中若使用 return ,函數會直接回傳數值 (value) ,也隨之終止函數執行。若使用另一個關鍵字 (keyword) yield,可使函數產生數值,而不會結束函數執 行,這樣的函數被稱為產生器函數(generator function)
範例:
Globe
一般定義在函數外的變數其範圍是一整個模組, 又稱全域變數(全域指的是整個模組)
有的時候在函數中我們希望改變或存取的是全域變數時,為了確認使用到正確的全域變數,而非定義一個新的區域變數時,我們需要利用 global敘述句來告知 python 某變數名稱指稱的是全域變數
呼叫函數時不使用參引數依序一對一對應傳遞,而是換成以參數名稱來進行傳遞與函式之呼叫(名稱呼叫)。這種依名稱傳遞的引數稱為 keyword argument。
函數 (function) 可以有不定個數的參數 (parameter),也就是可以在參數列 (paramenter list) 提供任意長度的參數個數
*arguments 就是參數識別字 (identifier) 前面加上一個星號,當成一組序對 (tuple)。
**keywords 參數識別字前面加上兩個星號,當成一組字典(dictionary)。
Yield產生器
函數 (function) 中若使用 return ,函數會直接回傳數值 (value) ,也隨之終止函數執行。若使用另一個關鍵字 (keyword) yield,可使函數產生數值,而不會結束函數執 行,這樣的函數被稱為產生器函數(generator function)
範例:
# 使用 yield 模擬 range() #
def
myrange(n):
x = 0
while True:
yield x
x += 1
if x == n:
break
print(list(myrange(10)))
變數的有效範圍
每個變數有其有效範圍, 也就是被認定(認識)的範圍Globe
一般定義在函數外的變數其範圍是一整個模組, 又稱全域變數(全域指的是整個模組)
有的時候在函數中我們希望改變或存取的是全域變數時,為了確認使用到正確的全域變數,而非定義一個新的區域變數時,我們需要利用 global敘述句來告知 python 某變數名稱指稱的是全域變數
範例:
#name
變數宣告在最外層,為全域變數
name =
"Tony"
def
change_name(n):
global name
name = n
print('In change_name function, name=%s' %
name)
print('Before
change_name function called, name=%s' % name)
change_name('John')
print('After
change_name function called, name=%s' % name)
Local
被定義在一個函數中的變數稱為區域變數, 其範圍是一整個函數
以上兩種範圍都必須從變數定義被python看到開始算起
當區域變數與全域變數名稱相同產生衝突時,區域內以區域變數為主,區域外以全域變數為主
沒有留言:
張貼留言