1.python中有很多內建函式:
(1)abs()求乙個整數的絕對值
(2)max(),min()求最大值,最小值
(3)hex()將乙個整數轉化為十六進製制,「0x」格式
(4)型別轉化函式:int(),float(),str()
2.定義函式
在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 "", line 1, in
typeerror: my_abs() takes 1 positional argument but 2 were given
但是如果引數型別不對,python直譯器就無法幫我們檢查。試試my_abs
和內建函式abs
的差別:
>>> my_abs('a')
traceback (most recent call last):
file "", line 1, in
file "", line 2, in my_abs
typeerror: unorderable types: str() >= int()
>>> abs('a')
traceback (most recent call last):
file "", line 1, in
typeerror: bad operand type for abs(): 'str'
當傳入了不恰當的引數時,內建函式abs
會檢查出引數錯誤,而我們定義的my_abs
沒有引數檢查,會導致if
語句出錯,出錯資訊和abs
不一樣。所以,這個函式定義不夠完善。
讓我們修改一下my_abs
的定義,對引數型別做檢查,只允許整數和浮點數型別的引數。資料型別檢查可以用內建函式isinstance()
實現:
def
my_abs
(x):
ifnot 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
defmove
(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
import math
語句表示匯入math
包,並允許後續**引用math
包裡的sin
、cos
等函式。
然後,我們就可以同時獲得返回值:
>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print(x, y)
151.96152422706632
70.0
但其實這只是一種假象,python函式返回的仍然是單一值:
>>> r = move(100, 100, 60, math.pi / 6)
>>> print(r)
(151.96152422706632, 70.0)
原來返回值是乙個tuple!但是,在語法上,返回乙個tuple可以省略括號,而多個變數可以同時接收乙個tuple,按位置賦給對應的值,所以,python的函式返回多值其實就是返回乙個tuple,但寫起來更方便。
4.函式使用形式分為兩種:(1)例如len(s),str(s);(2)s.lower()
第二種點標記法使用函式說明此函式只能用於字串,即s必須為字串;而第一種則可以用於其他資料型別。
python自定義函式和內建函式
def functionname parameters 函式 文件字串 function suite return expression 2.2分類 位置引數 def fun1 a,b print a,b fun1 1,2 關鍵字引數 def fun1 a,b print a,b fun1 b 1,...
自定義函式 Excel之自定義函式
在excel中,當系統函式不能滿足我們的需求時候,我們可以使用vba自定義函式,如抓取網頁資料,翻譯詞彙,手機號歸屬地查詢等。下面將介紹2個自定義函式,idymd函式 身份證年月日性別 通過身份證號,返回性別,出生年月日。語法 idymd id 引數 id,身份證號,預設身份證長度18位。vba 如...
資料庫內建函式及自定義函式
一 資料庫內建函式 數字函式 abs x 取x的絕對值 round x,n 將x四捨五入到n位 sqrt x 對x進行開平方 mod m,n 返回m除以n的餘數字串函式 lower upper x 轉小 大寫 initcap x 將每個單詞的首字母大寫 concat x,y 連線兩個字串 subst...