Python 學習之函數

函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的代碼段。

自定義函數

1. 規則:

  • 函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括號 ()。
  • 任何傳入參數和自變量必須放在圓括號中間,圓括號之間可以用於定義參數。
  • 函數的第一行語句可以選擇性地使用文檔字符串—用於存放函數說明。
  • 函數內容以冒號起始,並且縮進。
  • return [表達式] 結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當於返回 None。

2. 語法:

def functionname( parameters ):
   "函數_文檔字符串"
   function_suite
   return [expression]

3. 實例:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import math

def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x

def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny

n = my_abs(-20)
print(n)

x, y = move(100, 100, 60, math.pi / 6)
print(x, y)

# TypeError: bad operand type:
my_abs('123')

函數返回值

return [表達式] 語句用於退出函數,選擇性地向調用方返回一個表達式。不帶參數值的 return 語句返回 None。
實例:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

# 可寫函數說明
def sum( arg1, arg2 ):
   # 返回2個參數的和."
   total = arg1 + arg2
   print ("函數內 : ", total)
   return total
 
# 調用sum函數
total = sum( 10, 20 )
print ("函數外 : ", total)

函數參數

以下是調用函數時可使用的正式參數類型:

  • 必需參數
  • 關鍵字參數
  • 默認參數
  • 不定長參數
  1. 必需參數
    必需參數須以正確的順序傳入函數。調用時的數量必須和聲明時的一樣。
#!/usr/bin/python3
 
#可寫函數說明
def printme( str ):
   "打印任何傳入的字符串"
   print (str)
   return
 
# 調用 printme 函數,不加參數會報錯
printme()
  1. 關鍵字參數
    關鍵字參數和函數調用關係緊密,函數調用使用關鍵字參數來確定傳入的參數值。
#!/usr/bin/python3
 
#可寫函數說明
def printme( str ):
   print (str)
   return
 
#調用printme函數
printme( str = "hello world")
  1. 默認參數
    調用函數時,如果沒有傳遞參數,則會使用默認參數。
#!/usr/bin/python3
 
#可寫函數說明
def printinfo( name, age = 35 ):
   print ("名字: ", name)
   print ("年齡: ", age)
   return
 
#調用printinfo函數
printinfo( name="runoob" )
  1. 不定長參數
    你可能需要一個函數能處理比當初聲明時更多的參數。這些參數叫做不定長參數,基本語法如下:
def functionname([formal_args,] *var_args_tuple ):
   "函數_文檔字符串"
   function_suite
   return [expression]

匿名函數

python 使用 lambda 來創建匿名函數,也就是不再使用 def 語句這樣標準的形式定義一個函數。

  1. 特點:
  • lambda 只是一個表達式,函數體比 def 簡單很多。
  • lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
  • lambda 函數擁有自己的命名空間,且不能訪問自己參數列表之外或全局命名空間裏的參數。
  • 雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內聯函數,後者的目的是調用小函數時不佔用棧內存從而增加運行效率。
  1. 基本語法
lambda [arg1 [,arg2,.....argn]]:expression
  1. 實例
#!/usr/bin/python3
 
# 可寫函數說明
sum = lambda arg1, arg2: arg1 + arg2
 
# 調用sum函數
print ("相加後的值爲 : ", sum( 10, 20 ))
print ("相加後的值爲 : ", sum( 20, 20 ))

遞歸函數

在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞歸函數。
舉個例子,我們來計算階乘n! = 1 x 2 x 3 x … x n,用函數fact(n)表示,可以看出:

fact(n)=n!=1 x 2 x 3 x ··· x n=(n-1)! x n=fact(n−1)×n

def fact(n):
    if n==1:
        return 1
    return n * fact(n - 1)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章