原文閱讀python
學C的時候,寫函數常會先去找main
函數,一級一級的調用看下來,再在適當的一個函數裏,調用須要的函數,傳入參數,得到數據。Python
有點出入,一個.py文件,從上往下執行語句,main
函數就是開始語句。好比一個遞歸的函數數組
def fact(n): if n == 1: return 1; return n * n + fact(n - 1) print fact(4)
這個是計算1 * 1 + 2 * 2 + 3 * 3 + ... + n * n(markDown怎麼寫平方 - -#),遞歸調用,假設文件名爲a.py
,在Terminal下運行python a.py
,就輸出數據了。固然還能增長另外的函數和執行語句。函數
也能給函數指定別名(能夠理解爲函數指針):spa
def fact(n): if n == 1: return 1; return n * n + fact(n - 1) z = fact print z(4)
看一個函數,輸出一個數的絕對值,若是輸入的不是數字,則報錯:指針
def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type') if x > 0: return x elif x == 0: pass else: return -x print my_abs(5) print my_abs(0) print my_abs(-5) print my_abs('a')
輸出:
code
一個函數也能返回多個值:遞歸
import math def move(x, y, step, angle=0): nx = x + step * math.cos(angle) ny = y - step * math.sin(angle) return nx, ny a,b = move(100, 100, 60, math.pi / 6) print a, b
輸出:
ci
定義一個函數,計算x的n次方:get
def power(x, n): s = 1 while n > 0: n = n - 1 s = s * x return s
調用power(5,2)
,就能獲得25。若是這個函數主要是爲了計算平方,能夠寫成:it
def power(x, n = 2): s = 1 while n > 0: n = n - 1 s = s * x return s
調用power(5)
,也能獲得25。計算3次方power(5, 3)
,默認參數能夠節省輸入,預防一些錯誤。
Python
中函數的參數個數是可變的。具體是怎麼樣呢?好比咱們要計算a * a, b * b, c * c
:
1、def func(a, b ,c):
,函數參數是3個整數,調用時func(a, b, c)
2、def func(numbers):
,參數是一個list或者tuple,調用時func([a,b,c])
或func((a, b ,c))
而可變參數的函數是def func(*numbers):
,調用時候func(a, b, c)
,能夠寫成:
def func(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum
可變參數是傳入參數到函數後,函數自動將參數組裝成一個tuple
,關鍵字參數則是將參數組裝成key-value
鍵值對。好比:
def person(name, age, **kw): print 'name:', name, 'age:', age, 'other:', kw
調用函數:
>>> person('Michael', 30) name: Michael age: 30 other: {}
>>> person('Adam', 45, gender='M', job='Engineer') name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
這樣,函數參數就有了list
類型的參數。還能夠這麼調用
>>> kw = {'city': 'Beijing', 'job': 'Engineer'} >>> person('Jack', 24, **kw) name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
能夠將各類參數組合用,順序必須是:必選參數、默認參數、可變參數和關鍵字參數。好比:
def func(a, b, c=0, *args, **kw): print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw
*args
爲可變參數,接受的是tuple,**kw
是關鍵字參數,接受的是一個dict。