Python基礎學習3:函式
- 函式就是最基本的一種程式碼抽象的方式。
-
help(abs)
檢視幫助資訊。
呼叫函式
abs(2)
cmp(x,y)
int()
float()
str()
unicode()
bool()
hex()
max()
- 函式名其實就是指向一個函式物件的引用,完全可以把函式名賦給一個變數,相當於給這個函式起了一個“別名”
- 函式引數數量和型別不對時都會報
TypeError
錯誤。
定義函式
def my_abs(x):
if x>=0:
return x
else:
return -x
- 空函式
pass
def nop():
pass
- 引數檢查
TypeError
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
- 返回多個值
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print(x, y)
151.96152422706632 70.0
>>> r = move(100, 100, 60, math.pi / 6)
>>> print(r)
(151.96152422706632, 70.0)
Python的函式返回多值其實就是返回一個tuple。
函式的引數
- 位置引數
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
x
和n
,這兩個引數都是位置引數,呼叫函式時,傳入的兩個值按照位置順序依次賦給引數x
和n
。
- 預設引數
- 當函式有多個引數時,把變化大的引數放前面,變化小的引數放後面。變化小的引數就可以作為預設引數。
- 當不按順序提供部分預設引數時,需要把引數名寫上
- 預設引數必須指向不變物件
def add_end(L=None):
if L is None:
L = []
L.append('END')
return L
- 可變引數(tuple)
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
>>> calc(1, 2)
5
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
*nums
表示把nums
這個list的所有元素作為可變引數傳進去。
- 關鍵字引數(dict)
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
>>> person('Michael', 30)
name: Michael age: 30 other: {}
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, city=extra['city'], job=extra['job'])
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
**extra
表示把extra
這個dict的所有key-value用關鍵字引數傳入到函式的**kw
引數,kw將獲得一個dict,注意kw獲得的dict是extra的一份拷貝,對kw的改動不會影響到函式外的extra。
-
引數組合
- 順序必須是:必選引數、預設引數、可變引數和關鍵字引數。
def func(a, b, c=0, *args, **kw): print 'a:', a, 'b:', b, 'c:', c, 'args:', args, 'kw:', kw func(1, 3, 4, 5, 6, 23) func(1, 3, 4, 5, 6, ab=23) args = (12, 5, 6, 7) kw = {"key1": 90, 'x': 999} func(*args, **kw)
- 對於任意函式,都可以通過類似func(*args, **kw)的形式呼叫它,無論它的引數是如何定義的。
遞迴函式
使用遞迴函式需要注意防止棧溢位。在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入一個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位。
尾遞迴指在函式返回的時候,呼叫自身本身,並且,return語句不能包含表示式。這樣,編譯器或者直譯器就可以把尾遞迴做優化,使遞迴本身無論呼叫多少次,都只佔用一個棧幀,不會出現棧溢位的情況。
尾遞迴呼叫時,如果做了優化,棧不會增長,因此,無論多少次呼叫也不會導致棧溢位。
參考:《Python教程》
相關文章
- 零基礎學習 Python 之函式Python函式
- python基礎函式Python函式
- Python基礎-函式Python函式
- python函式基礎Python函式
- Python學習-字串函式操作3Python字串函式
- Python基礎學習3——列表Python
- Python3基礎-特別函式(map filter partial reduces sorted)例項學習Python函式Filter
- 【學習】SQL基礎-004-函式SQL函式
- Python零基礎學習筆記(二十四)——函式Python筆記函式
- python基礎之函式Python函式
- Python基礎(六) 函式Python函式
- python-函式基礎Python函式
- Python基礎(10):函式Python函式
- Python3學習(18)--偏函式(Partial)Python函式
- 《Python 基礎篇》五:函式Python函式
- 五、Python函式之基礎Python函式
- python基礎--函式全解析Python函式
- python基礎7 - 函式2Python函式
- Python基礎學習篇-4-常用的正規表示式處理函式Python函式
- 前端學習之PHP基礎函式總結前端PHP函式
- Python學習之函式Python函式
- python基礎學習Python
- Python基礎函式使用知識Python函式
- Python基礎之 4. 函式Python函式
- python 基礎語法 - 函式(一)Python函式
- Python基礎之閉包函式Python函式
- 【Python基礎】Python 函式返回多個值和函式註解Python函式
- 大資料學習記錄,Python基礎(3)大資料Python
- python菜鳥教程學習3:基礎語法Python
- Python 3 學習筆記之——基礎語法Python筆記
- Python表示式由什麼構成?Python基礎學習!Python
- Python學習之zip函式Python函式
- NumPy 基礎 (三) - 數學函式函式
- python基礎之 函式的引數Python函式
- python,函式各種基礎知識Python函式
- python3.7 函式基礎入門Python函式
- Python基礎之函式的巢狀Python函式巢狀
- Python基礎之白話說函式Python函式
- python基礎學習五Python