内建的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)