跟著廖雪峰學python 005

歆布發表於2023-02-19

 函式的呼叫、定義、引數 

跟著廖雪峰學python 005編輯

 #######命名關鍵字引數沒完

abs()函式:絕對值

>>> abs(100)
100
>>> abs(-20)
20
跟著廖雪峰學python 005

max()函式:接收任意多個引數,並返回最大的那個

>>> max(1, 2)
2
>>> max(2, 3, 1, -5)
3
跟著廖雪峰學python 005

資料型別轉換函式:

int():整數

float():浮點型

str():字元型

bool():布林型

定義函式

def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x
跟著廖雪峰學python 005

執行到return時,函式就執行完畢,並將結果返回

如果已經把my_abs()的函式定義儲存為abstest.py檔案了,那麼,可以用from abstest import my_abs來匯入my_abs()函式,注意abstest是檔名(不含.py副檔名):

空函式

如果想定義一個什麼也不做的空函式,可以用pass語句:

def nop():
    pass
跟著廖雪峰學python 005

pass 用來作為佔位符,比如沒想好寫什麼函式程式碼,可以先放個pass讓整體程式碼正常執行

pass也可以用在其他語句

if age >= 18:
    pass
跟著廖雪峰學python 005

這句缺少pass,程式碼就會有語法錯誤

返回多個值

比如在遊戲中經常需要從一個點移動到另一個點,給出座標、位移和角度,就可以計算出新的座標:

import math  #表示匯入math包,並允許後續程式碼引用包裡的sin、cos等函式


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

跟著廖雪峰學python 005

python多值返回就是返回一個tuple

跟著廖雪峰學python 005編輯

 函式引數

位置引數

計算_X{}^{2}<span class="cke_reset cke_widget_drag_handler_container"><img src="https://i.iter01.com/images/02b8f80160106e64fd241a78266924d0d2c3f86e8013d41fd54d98f3a79efb4f.gif" width="15" height="15" class="cke_reset cke_widget_drag_handler" title="點選並拖拽以移動" data-cke-widget-drag-handler="1" data-mce-src="https://i.iter01.com/images/02b8f80160106e64fd241a78266924d0d2c3f86e8013d41fd54d98f3a79efb4f.gif"><span class="cke_image_resizer" title="點選並拖拽以改變尺寸">​<span class="cke_widget_edit_container" title="編輯圖片">編輯的函式:

def power(x):
    return(x*x)
跟著廖雪峰學python 005

計算^{X_{}^{n}}<span class="cke_reset cke_widget_drag_handler_container"><img src="https://i.iter01.com/images/02b8f80160106e64fd241a78266924d0d2c3f86e8013d41fd54d98f3a79efb4f.gif" width="15" height="15" class="cke_reset cke_widget_drag_handler" title="點選並拖拽以移動" data-cke-widget-drag-handler="1" data-mce-src="https://i.iter01.com/images/02b8f80160106e64fd241a78266924d0d2c3f86e8013d41fd54d98f3a79efb4f.gif"><span class="cke_image_resizer" title="點選並拖拽以改變尺寸">​<span class="cke_widget_edit_container" title="編輯圖片">編輯的函式:

def power(x, n):
    s = 1
    while n > 0:
        s = s * x
        n = n - 1
    return x
跟著廖雪峰學python 005

x和n都是位置引數,呼叫函式時,傳入的兩個值按照位置順序依次賦給引數x和n

把第二個引數n的預設值設定為2:

def power(x, n = 2):
    s = 1
    while n > 0:
        s = s * x
        n = n - 1
    return x
跟著廖雪峰學python 005

此時,power(5)和power(5,2)等價

若n>2,就必須明確地傳入n,比如power(5,3)

注意:

必選引數在前,預設引數在後,否則Python的直譯器會報錯(容易產生歧義)

當函式有多個引數時,把變化大的引數放在前面,預設引數放在後面(降低呼叫函式的難度)

如:

def enroll(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    print('city:', city)
跟著廖雪峰學python 005

大多數學生註冊時不需要提供年齡和城市,只提供必須地兩個引數即可

enroll('Bob', 'M', 7)
enroll('Adam', 'M', city='Tianjin')
跟著廖雪峰學python 005

跟著廖雪峰學python 005編輯

可變引數

傳入的引數個數是可以變的

如:給一組數字,計算平方和(作為一個list或tuple傳進來)

def calc(numbers):
    sum = 0
    for n in nmumbers:
        sum = sum + n * n
    return sum
跟著廖雪峰學python 005

若函式引數為可變引數:

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
跟著廖雪峰學python 005

定義可變引數和定義一個list或tuple引數相比,只是在引數前面加一個 * 號,引數numbers接收到的是一個tuple。呼叫該函式時,可以傳入任意個引數,包括0個引數

 關鍵引數:

 關鍵字引數允許你傳入0個或任意個含引數名的引數:

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
跟著廖雪峰學python 005

也可以傳入任意個數的關鍵字引數:

>>> person('Michael', 30)
name: Michael age: 30 other: {}
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
跟著廖雪峰學python 005

關鍵引數可以擴充套件函式功能。比如,person函式name和age兩個引數是必選項,但如果提供更多的引數就需要利用關鍵字引數

可以把字典轉換為關鍵字引數傳進去:

>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
跟著廖雪峰學python 005
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, city=extra['city'], job=extra['job'])
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
跟著廖雪峰學python 005

相關文章