国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中自定義函數的教程

2019-11-25 17:39:01
字體:
來源:轉載
供稿:網友

在Python中,定義一個函數要使用def語句,依次寫出函數名、括號、括號中的參數和冒號:,然后,在縮進塊中編寫函數體,函數的返回值用return語句返回。

我們以自定義一個求絕對值的my_abs函數為例:

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

請自行測試并調用my_abs看看返回結果是否正確。

請注意,函數體內部的語句在執行時,一旦執行到return時,函數就執行完畢,并將結果返回。因此,函數內部通過條件判斷和循環可以實現非常復雜的邏輯。

如果沒有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 "<stdin>", line 1, in <module>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 "<stdin>", line 1, in <module>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 "<stdin>", line 1, in <module> File "<stdin>", line 3, in my_absTypeError: bad operand type

錯誤和異常處理將在后續講到。
返回多個值

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

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

import mathdef 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, y151.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。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天镇县| 永清县| 宁明县| 体育| 延庆县| 兴义市| 阆中市| 奈曼旗| 永顺县| 德安县| 图木舒克市| 娄底市| 班戈县| 同德县| 渭源县| 呼玛县| 宕昌县| 民权县| 兴宁市| 鄂托克前旗| 罗山县| 阿图什市| 梧州市| 平顺县| 商丘市| 灌阳县| 定结县| 菏泽市| 遂溪县| 疏附县| 都兰县| 凤山县| 吉首市| 维西| 博罗县| 讷河市| 禹城市| 长宁县| 临泽县| 盐津县| 汉源县|