Python的内置特性
Python的一些内置特性还事比较有用的,我们可以根据一些特殊需求进行一些重构和自定义。
1、__missing__
如果dict的子类定义了该方法,那么当获取不存在的键值时,就会调用该方法。该方法的参数为对应的key。
一个简单的例子:
class Dict(dict):
4 def __missing__(self,key):
5 self[key] = ''
6 return self[key]
7
8 d = Dict()
9 d['d'] = 'd'
10 print d['d']
11 print d['p']
输出:
d
但如果你不定义__missing__,那你访问字典不存在的值时,肯定会跑出KeyError的异常。
2、for...else
for循环都用过,几乎每种语言都是大同小异的。但python的for...else还是比较特殊,且有用的。
当可迭代对象为空时,就会执行else语句,但如果在循环语句中含有break语句,并执行break跳出循环,就不会执行else语句。
假如我们想判断某一数据列表是否含有偶数,就可以使用这种方法:
def forelse():
15 for i in [1,3,5]:
16 if i%2==0:
17 break
18 else:
19 print 'they are all ood'
20
21
22 forelse()
3、函数可变长参数
我们经常会要求为参数传递多个参数,一般做法都是:
def test(*args,**kwargs):
print args
print kwargs
*args将收集所有位置相关的参数,并放到一个元组中,最后将这个元组赋值给args.
而**kargs指针对关键字参数(如a=1),这些关键字参数会放到一个字典中,并赋值给kargs。
注意一点:由于args是元祖,不可对值元祖进行修改。
上面介绍了基本用法,他是以一种散列的方式传入的。Python中还有一种用法:叫参数解包。
def para(x,y):
print x,y
para(*[1,2])
para(**{'x':2,'y':4})
输出:
1,2
2,4
我的理解是Python对参数进行解包,列表,元祖,集合等就解包成散列的元素;字典解包成x=2,y=4的形式。
参数的解包的确很方便。
3、and or的使用
当我们在做判断的时候,要加逻辑与或者“或”的时候,会用到 and or,这一点和其他语言没区分,但是Python不同之处是它返回的是并不是布尔值。
1)and
从左到右,返回的是第一个为假的表达式,如果没有,就返回最后一个表达式。
>>> 'a' and 'b'
'b'
>>> 'a' and ''
''
>>> '' and 'a'
''
2)or
从左到右,返回第一个为真的表达式,如果没有,就返回最后一个表达式
>>> 'a' or 'b'
'a'
>>> 'a' or ''
'a'
>>> '' or 'b'
'b'
>>> 'a' and '' or 'c'
'c'
>>> '' and 'a' or 'c'
'c'
>>> 'a' and 'b' or 'c'
'b'
微信分享/微信扫码阅读