認(rèn)識(shí)函數(shù)
help() 查看內(nèi)部函數(shù)的幫助
import this 查看python之禪
特性:
1.功能性
2.隱藏細(xì)節(jié)
3.避免編寫(xiě)重復(fù)的代碼
次要特性:組織代碼 -> 面向?qū)ο蟾侠?/p>
函數(shù)的定義及運(yùn)行特點(diǎn):
函數(shù)的基本結(jié)構(gòu)
def func(**param):
pass
- 參數(shù)列表可以沒(méi)有
2.return 用來(lái)返回函數(shù)返回值 - 函數(shù)需要調(diào)用才會(huì)起作用
- 函數(shù)調(diào)用需要在定義之后
函數(shù)的取值根據(jù)順序來(lái)決定,主要是位置參數(shù)、還有可變參數(shù),命名關(guān)鍵詞參數(shù),關(guān)鍵詞參數(shù)。
python設(shè)置最大遞歸層數(shù)
import sys
sys.setrecursionlimit(10000)
循環(huán)實(shí)現(xiàn)的fab數(shù)列,遞歸也能實(shí)現(xiàn),而且更簡(jiǎn)單。
廖雪峰--遞歸與尾遞歸--汗諾塔
# 遞歸函數(shù) -- 別人寫(xiě)的汗諾塔
class Tower(object):
def __init__(self):
self.counter = 0
def hanoi(self, n, org, aux, dst):
if n == 1:
self.counter += 1
print('{0}->{1}'.format(org, dst))
else:
self.hanoi(n - 1, org, dst, aux)
self.hanoi(1, org, aux, dst)
self.hanoi(n - 1, aux, org, dst)
def homework(*args):
tower = Tower()
print('移動(dòng)步驟如下:')
tower.hanoi(*args)
print('總共移動(dòng)次數(shù)為: {0}'.format(tower.counter))
homework(100,'a','b','c') # 100基本算不出來(lái),10還差不多
如何讓函數(shù)返回多個(gè)結(jié)果
def damage(skill1, skill2):
return skill1*3, skill2*3 # 默認(rèn)返回值為tuple
print(damage(1, 2))
#獲取返回結(jié)果的正確方法
# 序列解包
skill1_damage, skill2_damage = damage(1, 2)
#不推薦通過(guò)索引獲取,會(huì)造成可讀性變差
序列解包和鏈?zhǔn)秸{(diào)用
d = 1, 2, 3 序列
a, b, c = d 類似這種的賦值形式就是序列解包,解包的變量個(gè)數(shù)要和序列數(shù)相等,否則會(huì)報(bào)錯(cuò)。
a = b = c = [1, 2] 鏈?zhǔn)秸{(diào)用,會(huì)同id。
必須參數(shù)與關(guān)鍵字參數(shù)
必須參數(shù):位置參數(shù),必須要傳入。
形參、實(shí)參的概念。
通過(guò)關(guān)鍵字參數(shù)沒(méi)必要通過(guò)位置參數(shù)順序調(diào)用函數(shù)。指定參數(shù)給哪個(gè)形參。
必須參數(shù)和關(guān)鍵字參數(shù)的區(qū)別主要在調(diào)用上,定義上沒(méi)區(qū)別。
默認(rèn)參數(shù)
從而使參數(shù)不是必須輸入的。