今天我們來聊聊python里的函式,要注意的地方其實挺多的,一點點慢慢梳理,
首先,讓我們來看看python的函式長什么樣?
定義
# 定義一個函式 def my_func(a): a += 1 return a
注意函式的開頭用的是def 而不是其他語言的function,第一行的結尾有個冒號,然后這里還要注意一個就是函式式沒有{}這種括號的,python怎么去判斷陳述句是否屬于這個函式呢?它是用縮進來判斷的,所以在寫的時候注意好縮進,
這個函式里面具體的內容,這邊不詳細說,后面會說到,
呼叫
# 呼叫函式 print(my_func(2))
呼叫非常簡單,
但是需要注意的是,如果引數的數量不對,運行的時候會報錯,
回傳值
回傳值可以有一個、多個,也可以沒有,
回傳值為1個的時候就不說了,多個回傳值的情況如下:
# 多個回傳值 def my_multy(x): y = x+1 z = x-1 return y,z r = my_multy(3) print(r)
執行的結果為:
(4, 2)
也就是說,當回傳多個值的時候,其實是以tuple也就是元組的形式回傳的,
那如果不寫回傳值呢?
# 不寫回傳值 def none_return(): pass x = none_return() print(x)
執行的結果為:
None
也就是說,不寫回傳值的話,默認會回傳None,當然你也可以手動回傳None
引數
這一塊最復雜,東西比較多,但是很重要,
位置引數
位置引數就是我們平常遇到的最多的引數了,呼叫的時候數量必須和定義的引數數量一致,否則會報錯,這個比較簡單,沒什么好說的,
默認引數
默認引數就是定義函式的時候給引數設定一個默認值,呼叫函式的時候如果沒有給這個引數,函式就會自動呼叫這個默認值,比如:
# 默認引數 def default_param(a,b=3): return a + b x = default_param(1) print(x)
執行的結果為:
4
這里引申一個概念,可變引數和不可變引數
可變引數有:串列、集合、字典
不可變引數有:數字、字串、元組
默認引數必須用不可變引數!如果用可變引數,會出問題,比如:
def add_end(L=[]): L.append('END') return L print(add_end()) print(add_end()) print(add_end()) print(add_end())
結果為:

原因是函式在定義的時候,這個默認引數的值已經計算出來了,并且給了一個指向,這個指向是不變的,但是這個指向的內容,一直在改變
可變引數
可變引數允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為一個tuple
用法:
定義:
# 可變引數 def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum
呼叫:
print(calc(1,2,3))
或
a = [1,2,3] print(calc(*a))
或
a = (1,2,3) print(calc(*a))
關鍵字引數
關鍵字引數允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為一個dict
用法:
定義:
# 關鍵字引數 def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw)
呼叫:
a = {'weight':130,'height':175}
person('sun',27,**a)
或
person('sun',27,weight=130,height=175)
執行結果:

命名關鍵字引數
如果要限制關鍵字引數的名字,就可以用命名關鍵字引數,例如,只接收city和job作為關鍵字引數,這種方式定義的函式如下:
定義:
# 命名關鍵字引數 def person2(name, age, *, city, job): print(name, age, city, job)
呼叫:關鍵字引數只能是city和job
呼叫:
person2('Jack', 24, city='Beijing', job='Engineer')
或
b = {'city':'Beijing', 'job':'Engineer'}
person2('Jack', 24, **b)
引陣列合的順序
引數定義的順序必須是:必選引數、默認引數、可變引數、命名關鍵字引數和關鍵字引數
比如:
def f1(a, b, c=0, *args, **kw): print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw) def f2(a, b, c=0, *, d, **kw): print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
注意:
對于任意函式,都可以通過類似func(*args, **kw)的形式呼叫它,無論它的引數是如何定義的,比如:
def f1(a, b, c=0, *args, **kw): print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw) def f2(a, b, c=0, *, d, **kw): print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw) def f3(a, b, c=0): print('a =', a, 'b =', b, 'c =', c) a = (1,2,3) b = {'name':'sun','weight':130} c = {'d':8,'name':'sun','weight':130} f1(*a,**b) f2(*a,**c) f3(*a)
執行結果為:

內置函式舉例
python有很多內置函式,我們碰到了就記一下,
求絕對值函式
# 求絕對值函式 print(abs(10)) #10 print(abs(-28)) #28
求最大值函式
# 求最大值函式 print(max(1,-3,10)) #10
資料型別轉換函式
# 資料型別轉換函式 print(int('1111')) #1111 print(str(12.3)) #'12.3' print(bool(1)) #True
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/184533.html
標籤:Python
上一篇:計算機基礎
