內建的callable函數可以判斷函數是否可調用:
定義函數:def語句,可以沒有return。
定義函數並設置默認值:
參數中定義元組(加 *號):
也可以混合使用 普通參數 和 元組:
參數中定義字典(加 **號):
放在一起:
【反轉過程】
◆ 下面的案例,test_a 函數的定義和調用都使用了**號,而test_b函數定義和調用都沒使用,但是結果是一樣的。所以:*號 只在定義函數(允許使用不定數目的參數)或者調用(“分割”字典或者序列)時纔有用。(09.py)
【綜合練習 10.py】
#encoding:utf-8
def story(**kwds):
return 'This is a story:' \
'%(job)s --- %(name)s' % kwds
def power(x,y,*others):
if others:
print 'Good student:',others
return pow(x,y)
def interval(start,stop=None,step=1):
'Imitates range() for step > 0'
if stop is None: #如果沒有爲stop提供值
start,stop = 0,start #指定參數
result = []
i = start #計算start索引
while i < stop: #直到計算到stop索引
result.append(i) #將索引添加到result內
i+=step #用step(>0)增加索引i
return result
#---------------------------------------------
print story(job='king',name='renxing')
print story(name='Green',job='teacher')
params = {'job':'language','name':'Python'}
print story(**params)
del params['job']
print story(job='hahahaha',**params)
power(2,3)
power(3,2)
power(y=3,x=2)
params = (5,)*2
power(*params)
power(3,3,'Hello_world')
interval(10)
interval(1,5)
interval(3,12,4)
power(*interval(3,7))
【作用域】
內建的vars 函數:
函數內的變量稱爲:局部變量
使用 全局變量 (global)
【函數可以嵌套】
def foo():
def bar():
print “Hello_world”
◆ 例如下面的案例(看懂了但是卻運行錯誤):
【遞歸】
(1)階乘。n×(n-1)×(n-2)×...×1.
(2)冪運算:
(3)用遞歸實現一個二分查找法:(13.py)
#encoding:utf-8
#用遞歸實現一個二分查找法
def search(sequence,number,lower=0,upper=None):
if upper is None:
upper = len(sequence) - 1
if lower == upper:
assert number == sequence[upper]
return upper
else:
middle = (lower + upper) // 2
if number > sequence[middle]:
return search(sequence,number,middle+1,upper)
else:
return search(sequence,number,lower,middle)