## 函數
[TOC]
>[info] #### 基礎系統函數
~~~
>>>abs(-10) # 10 取絕對值
>>>cmp(x,y) #就需要兩個參數,如果x<y,返回-1,如果x==y,返回0,如果x>y,返回1
>>>int("10"), float("1.25"),str(123), unicode(100),bool(1),
>>>int(float("12.2")) #浮點型轉整型
~~~
* 函數相當于一個別名,可以賦值給某變量
~~~
>>>a = abs
>>>a(-99)
99
~~~
>[info] #### 定義函數
* 標準定義函數,以冒號:開始
~~~
def calc(x):
return x
~~~
>[info] #### 使用函數默認值
~~~
def add(a, b=10) :
return a + b
print add(10) #相當于10+10
def dec(a, b = 1, c = 2):
return a - b - c
print dec(10, c=3) #使用默認值可以不按順序來,相當于10-1-3 = 7
~~~
* 常見問題
~~~
def add_end(L = []):
L.append("A")
return L
print add_end()
print add_end()
print add_end()
['A']
['A', 'A']
['A', 'A', 'A']
~~~
* 如何解決呢?
~~~
def add_end(L = None):
if L is None:
L = []
L.append("A")
return L
print add_end()
print add_end()
print add_end()
['A']
['A']
['A']
~~~
>[info] #### 可變參數
* 加*變成可變參數
* 可變參數允許你傳入0個或任意個參數,這些可變參數在函數調用時自動組裝為一個tuple
~~~
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
>>> calc(1, 3, 5, 7)
84
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
~~~
>[info] #### 關鍵字參數
* 用兩個**表示
* 關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict
~~~
def person(name, age, **kw):
print 'name:', name, 'age:', age, 'other:', kw
~~~
~~~
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
~~~
>[info] #### 參數組合
* 參數定義的順序必須是:必選參數、默認參數、可變參數和關鍵字參數。
~~~
def func(a, b, c=0, *args, **kw):
print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw
~~~
~~~
>>> func(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
~~~
>[info] 小結
* 默認參數一定要用不可變對象,如果是可變對象,運行會有邏輯錯誤!
* *args是可變參數,args接收的是一個tuple;
* **kw是關鍵字參數,kw接收的是一個dict。