python入門(14)定義函式和接收返回值

2021-09-07 10:50:58 字數 2620 閱讀 9069

定義函式:

定義乙個求絕對值的my_abs函式為例:

def my_abs(x): if x >= 0: return x else: return -x 

如果沒有return語句,函式執行完畢後也會返回結果,只是結果為none

return none可以簡寫為return

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

def nop():

pass

pass語句什麼都不做,那有什麼用?實際上pass可以用來作為佔位符,比如現在還沒想好怎麼寫函式的**,就可以先放乙個pass,讓**能執行起來。

pass還可以用在其他語句裡,比如:

if age >= 18:

pass

缺少了pass,**執行就會有語法錯誤。

呼叫函式時,如果引數個數不對,python直譯器會自動檢查出來,並丟擲typeerror

>>> my_abs(1, 2)

traceback (most recent call last):

file "", line 1, in

typeerror: my_abs() takes exactly 1 argument (2 given)

但是如果引數型別不對,python直譯器就無法幫我們檢查。試試my_abs和內建函式abs的差別:

>>> my_abs('a')

'a'>>> abs('a')

traceback (most recent call last):

file "", line 1, in

typeerror: bad operand type for abs(): 'str'

當傳入了不恰當的引數時,內建函式abs會檢查出引數錯誤,而我們定義的my_abs沒有引數檢查,所以,這個函式定義不夠完善。

讓我們修改一下my_abs的定義,對引數型別做檢查,只允許整數和浮點數型別的引數。資料型別檢查可以用內建函式isinstance實現:

def my_abs(x):

if not isinstance(x, (int, float)):

raise typeerror(

'bad operand type')

if x >= 0: return x else: return -x

新增了引數檢查後,如果傳入錯誤的引數型別,函式就可以丟擲乙個錯誤:

>>> my_abs('a')

traceback (most recent call last):

file "", line 1, in

file "", line 3, in my_abs typeerror: bad operand type

錯誤和異常處理將在後續講到。

函式可以返回多個值嗎?答案是肯定的。

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

import math

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

這樣我們就可以同時獲得返回值:

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

但其實這只是一種假象,python函式返回的仍然是單一值:

>>> r = move(100, 100, 60, math.pi / 6) >>> print r (151.96152422706632, 70.0) 

原來返回值是乙個tuple!但是,在語法上,返回乙個tuple可以省略括號,而多個變數可以同時接收乙個tuple,按位置賦給對應的值,所以,python的函式返回多值其實就是返回乙個tuple,但寫起來更方便。

定義函式時,需要確定函式名和引數個數;

如果有必要,可以先對引數的資料型別做檢查;

函式體內部可以用return隨時返回函式結果;

函式執行完畢也沒有return語句時,自動return none

函式可以同時返回多個值,但其實就是乙個tuple。

python入門14模組

1.模組概述 為了解決難以維護的問題,我們把很多相似功能的函式分組,分別放到不同的檔案中。這樣每個檔案所包含的內容相對較少,而且對於每乙個檔案的大致功能可用檔名來體現 優點 1.提高 的可維護性 2.提高了 的復用度,當乙個模組完畢,可以被多個地方引用 3.引用其他的模組 內建模組和第三方模組和自定...

Python入門之路(14)

屬性 類屬性,直接在類中定義的屬性是類屬性 類屬性可以通過類或類的例項訪問到。但是類屬性只能通過類物件來修改,無法通過例項物件修改 例項屬性 通過例項物件新增的屬性屬於例項屬性 例項屬性只能通過例項物件來訪問和修改,類物件無法訪問修改 方法 在類中定義,以self為第乙個引數的方法都是例項方法 例項...

Python函式定義和函式呼叫

我們已經使用了一些python內建函式,比如print input str 等等。也使用了一些python自帶模組的一些庫函式,比如math模組的abs 函式。函式定義 函式呼叫 函式名 引數 示例 自定義乙個函式,要求傳入乙個任意數值,返回傳入引數的絕對值。defmy abs invalue if...