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'

 

 

--------EOF---------
微信分享/微信扫码阅读