11. Python脚本学习笔记十一函数与参数
本篇名言:“每当夜深人静的时候望着那灿烂的夜空我会感到那里充满了太多的梦想、告诉自己生命就象一场比赛、不争取就一定会失败!”
先来看下python 下实现斐波那契数列
>>> for i in range(8):
... fibs.append(fibs[-2]+fibs[-1])
...
>>> fibs
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
是不是很简便的就实现了斐波那契算法?
这次我么来看下函数相关。
1. Python函数
函数创建如下:
defhello(name):
return'hello.'+name +'!'
print hello('friend')
然后进行了调用,输出如下:
hello.friend!
通过callable函数来判断是否可以调用。
Callable(hello)
1.1 函数记录
函数注释使用#,这个和很多脚本注释一样。
def hello(name):
'hello to name'
return 'hello.'+ name +'!'
print hello.__doc__
这样会输出这个函数用来干什么记录。
__doc__是函数属性。
也可以用help函数如下:
defhello(name):
'hello to name'
return'hello.'+name +'!'
printhello.__doc__
print help(hello)
2. 参数
参数这块和C语言一样涉及到参数传递的方式,是形参还是实参。
传入的是一个副本还是一个地址。如果是副本,那参数的任何修改不会影响外部的值。如果是地址,那么函数内对参数的操作会字节影响到外部的值。
2.1 收集参数
defprint_params(*param):
print param
上面这个函数实现将参数都打印出来。
*号表示收集所有的位置参数。
如果是关键参数就需要使用**
defprint_params(x,y,z=3,*pospar,**keypar):
print x,y,z
print pospar
print keypar
print_params(1,2,3,4,5,6,7,foo=1,bar=2)
输出如下:
1 2 3
(4, 5,6, 7)
{'foo': 1,'bar': 2}
2.2 参数练习使用
如下代码:
defstory(**kwds):
return'Once upon a time,there was a' \
'%(job)s called %(name)s' % kwds
defpower(x,y,*others):
if others:
print'Received redundant parameters:',others
return pow(x, y)
definterval(start,stop=None,step=1):
'Imitates range() for step >0'
if stop isNone:
start,stop=0,start
result=[]
i=start
while i < stop:
result.append(i)
i += step
return result
printstory(job='king',name='Gumby')
printstory(name='sir robin',job='brave knight')
params={'job':'language','name':'Python'}
printstory(**params)
delparams['job']
printstory(job='stroke of genius',**params)
printpower(2,3)
printpower(3,2)
printpower(y=3,x=2)
params=(5,)*2
printpower(*params)
power(3,3,'Hello world')
printinterval(10)
printinterval(1.5)
printinterval(3,12,4)
printpower(*interval(3.7))
PS:这里start,stop=0,start 表示交换赋值
结果如下:
Onceupon a time,there was aking called Gumby
Onceupon a time,there was abrave knight called sir robin
Onceupon a time,there was alanguage called Python
Onceupon a time,there was astroke of genius called Python
8
9
8
3125
Receivedredundant parameters: ('Hello world',)
[0, 1,2, 3, 4, 5, 6, 7, 8, 9]
[0, 1]
[3, 7,11]
Receivedredundant parameters: (2, 3)
0