Python六七章续
在这说一下,我用的书是《Python程序员指南》,杨昆,王兴东编著
我使用的是免费电子版的,有点不清晰,如果觉得我写的东西有点乱的话,可以下载书,搭配着看。
今天还是看第六七章,接着函数。
def parrot(voltage,state='a stiff',action='voom',type='Norwegian Blue'):
print "--This parrot wouldn't",action,
print "if you put",voltage,"Volts through it."
print "--Lovely plumage.the",type
print "--it's",state,'!'
>>> parrot(1000)
--This parrot wouldn't voom if you put 1000 Volts through it.
--Lovely plumage.the Norwegian Blue
--it's a stiff !
>>>
一般来说,一连串的参数的次序是先有非关键词参数(也可以没有)然后才是关键词参数,关键词必须是函数定义时所用的参数名。这个定义时用的参数名有没有默认值并不重要,但是一个传入的参数只能有一个值,如果你已经先用非关键词参数给了某个参数一个值,接下来就不能用关键词参数给它另外的值。
对于这段话,我的理解关键词参数就是用=赋值的传参方式,非关键词就是直接传值。另外书上有写传参允许和不允许的格式举例,看了会更有助于理解。
>>> def f(a):
pass
>>> f(0)
>>> f(0,a=0)
Traceback (most recent call last):
File "<pyshell#4>", line 1, in -toplevel-
f(0,a=0)
TypeError: f() got multiple values for keyword argument 'a'
>>>
以上是举例函数调用传参的要求。
Python里当一个函数参数名称这样定义**Name,表示这个参数是个字典,关于Python的字典,书上有介绍,算是一种特殊的数据结构,与数组比较类似,但每个元素有自己的名称。详细看书上。
可以用*Name定义一个不限定数目的List
>>> def cheeseshop(kind,*argument,**keywords):
print "--Do you have any",kind,'?'
print "--I'm sorry. we're all out of",kind
for arg in argument:print arg
print '-'*40
for kw in keywords.keys():print kw,':',keywords[kw]
>>> cheeseshop('Limburger',"It's very runny,sir.","It's really very ,very runny,sir.",client='John Cleese',shopkeeper='Michael Palin',sketch='Cheese Shop Sketch')
--Do you have any Limburger ?
--I'm sorry. we're all out of Limburger
It's very runny,sir.
It's really very ,very runny,sir.
----------------------------------------
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch
client : John Cleese
>>>
看到没,先是函数,后来传了一堆东西调用这个函数,一个list可以接受好几句话,然后将它们打印出来,字典打印有点不明白,那个顺序是怎么搞的,请知道的同志留言解答,事实上它不是随机打印的,我试了几次顺序都是这样,很奇怪,这段程序看不出有控制顺序的语句。
好了,不聊了,今天要独自上英语课,另外推荐大家两部英文电影。我很喜欢的,通往特雷比西亚的桥,小妇人。