函數:就是完成特定功能的代碼段html
將重複的代碼段封裝成函數,能夠提升代碼利用率和實現抽象python
一、Python提供了大量的內置函數函數
關於python的內置函數使用,能夠參官網上的文檔庫https://docs.python.org/2/library/index.html,命令行
中文版文檔庫http://python.usyiyi.cn/translate/python_278/library/functions.html
固然,也能夠在交互命令行下,輸入help(),而後輸入幫助信息,退出幫助用Ctrl+Ccode
#!/usr/bin/env python #-*- coding:utf-8 -*- # ★常見內置函數之abs(n)==》絕對值 print abs(-20.1) # print abs(-20,9) # 報錯信息 # print abs('a') # 報錯信息 # 常見內置函數之cmp(x,y)==》比較大小:x<y返回-1,x=y返回0,x>y返回1 print cmp(2,3) print cmp(2,2) print cmp(2,1) print cmp(u'中文',2) # 字母對應的ASCII值 #常見內置函數之類型轉換int(),float(),str(),unicode(),bool() print int("123") # 全數字 # print int("123") # 報錯信息 print str(123) # 全數字 print unicode('abc') # ★函數名其實就是指向一個函數對象的引用,能夠把函數名賦給一個變量,至關於給這個函數起了一個「別名」 len_str = len len_list = len print len_str("abcd") print len_list([1,2,3,4])
運行效果:htm
二、Python內置的函數只能協助解決部分問題,實際中最經常使用到的是自定義函數,將重複性高的代碼段,本身封裝成函數,以簡化操做。同時自定義函數時應注意一些問題。對象
# ★★★自定義函數 PI = 3.14 def area_of_circle(r): if r <= 0: return None else: return PI * r * r print area_of_circle(2) # 自定義函數須要使用def語句,冒號後的代碼塊中寫函數體 # 函數遇到return,當即結束,並返回結果。若是沒有return,函數執行完畢,會自動返回None;return None等同於return # ★空函數 # 若是想定義一個什麼也不作的函數,或者函數體還沒想好的函數,此時能夠定義成一個空函數 def get_a_girlfriend(): pass print get_a_girlfriend() # pass語句表示什麼也不作,經常使用做佔位符或內容沒想好的地方 if 19 >= 18: pass # ★參數檢查==》藉助內置函數isinstance() # 解釋器能夠對自定義函數進行參數個數檢查,可是不會進行參數類型檢查,如今爲完善自定義函數,自行設置參數檢查 # 對area_of_circle(r)函數設置參數檢查,傳入的參數只容許是int和float PI = 3.14 def circ_of_circle(r): if not isinstance(r,(int,float)): raise TypeError("bad operand type! only for int or float!") if r <= 0: return None else: return 2 * PI * r # print circ_of_circle('a') # 查看報錯 print circ_of_circle(2) # ★函數同時返回多個值 # 須要提早說明的是,Python函數確實能夠同時返回多個值,這點與其餘語言有點不同 # 導入Python內置的模塊用關鍵字import。例如import 模塊名。具體到某個方法能夠用from 模塊名 import 方法名 # 對於第一種,訪問該模塊內方法時須要模塊名.方法名。第二種能夠直接使用方法名 # 建立一個移動的點的位置座標.參數是起始點座標,位移大小,角度 import math def Point_Move(x, y, displace, angle): xx = x + displace * math.cos(angle) yy = y - displace * math.sin(angle) return xx, yy nx, ny = Point_Move(100,100,20,math.pi / 6) print nx, ny # 從上看出,咱們確實同時獲得了兩個返回值 print Point_Move(100,100,20,math.pi / 6) # 可是,這句的返回值倒是一個tuple類型的值【本質上返回的就是一個tuple】 nx, ny = Point_Move(100,100,20,math.pi / 6) print nx # 這句話說明返回的tuple能夠由幾個變量同時、分別對應接收【本質上返回的是tuple,可是寫成返回多個值更方便分析數據】
運行效果:utf-8