python学习【三】 python基础2

collections模块介绍

collections是Python内建的一个集合模块,提供了许多有用的集合类。下面简单介绍几个常用的类:

1、counter(计数器)

Counter是对字典类型的补充,用于统计值的出现次数。另外,它还集成了字典的所有功能。

from collections import Counter
a=Counter('123qweasdeq12332cxzasdwq')
print a
输出:
Counter({'q': 3, '3': 3, '2': 3, 'a': 2, 'e': 2, 'd': 2, 's': 2, '1': 2, 'w': 2,'c': 1, 'x': 1, 'z': 1})

update用于更新计数器,其实就是增加;如果原来没有,则新建,如果有则加一 

>>> from collections import Counter
>>> c = Counter('which')
>>> print c
Counter({'h': 2, 'i': 1, 'c': 1, 'w': 1})
>>> d = Counter('watch')
>>> print d
Counter({'a': 1, 'h': 1, 'c': 1, 't': 1, 'w': 1})
>>> c.update(d)
>>> print c
Counter({'h': 3, 'c': 2, 'w': 2, 'a': 1, 'i': 1, 't': 1})

另外,counter还有一些其他的方法,如:elements、subtract(功能和update相反)、copy等,这里就不再介绍。

2、orderedDict (有序字典)

orderdDict是对字典类型的补充,他记住了字典元素添加的顺序。

3、defaultdict(默认字典)

这里通过实例进行说明,要求如下:

有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66 , 'k2': 小于66}

通常情况下会以如下实现:

values = [11, 22, 33,44,55,66,77,88,99]

my_dict = {}

for value in  values:
    if value>66:
        if my_dict.has_key('k1'):
            my_dict['k1'].append(value)
        else:
            my_dict['k1'] = [value]
    else:
        if my_dict.has_key('k2'):
            my_dict['k2'].append(value)
        else:
            my_dict['k2'] = [value]

使用defaultdict实现如下:

from collections import defaultdict

values = [11, 22, 33,44,55,66,77,88,99,90]

my_dict = defaultdict(list)

for value in  values:
    if value>66:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)

通过两种实现方法的对比,明显使用defaultdict要比不使用defaultdict实现起来简单的多。

4、namedtuple(可命名元组)

它可以创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。

>>> from collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y'])
>>> p = Point(1, 2)
>>> p.x
1
>>> p.y
2

5、deque(双向队列)

使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

>>> from collections import deque
>>> q = deque(['a', 'b', 'c'])
>>> q.append('x')
>>> q.appendleft('y')
>>> q
deque(['y', 'a', 'b', 'c', 'x'])
>>> q.popleft()
'y'
>>> q
deque(['a', 'b', 'c', 'x'])
>>> q.pop()
'x'
>>> q
deque(['a', 'b', 'c'])

从上面的例子中就可以看出,deque不仅可以向队列两边追加数据,还可以从两边删除数据。

既然有双向队列,那么就会有单向队列,单向队列引用自Queue.Queue,Queue中的方法如下:

>>> import Queue
>>> dir(Queue.Queue)
['__doc__', '__init__', '__module__', '_get', '_init', '_put', '_qsize', 'empty'
, 'full', 'get', 'get_nowait', 'join', 'put', 'put_nowait', 'qsize', 'task_done'
]

内置函数1

常用的内置函数:

vars()  #获取py文件中的所有变量
type()  #获取变量的类型
dir()   #显示类中的方法
help()  #获取类中方法的详细信息
id()   #获取对象在内存中的唯一标识
is()   #两个变量的内存地址进行比较

cmp(v1,v2) #比较v1好v2的大小,当v1<v2,返回-1;当v1=v2,返回=0;当v1>v2,返回1
abs()   #求绝对值
divmod(args1,args2) #有两个参数,返回两个数的商和余数。例如:divmod(10,3),返回(3,1)。常用于分页。
pow(n)  #2的n次方
max()   #取最大值
min()    #取最小值
sum()  #求和
len()   #返回集合的长度
all()  #接收一个序列,对其进行判断,当所有的值都为真时,返回true。
any()  #接收一个序列,对其进行判断,只要有一个值为真,就返回true。
ord("A")==>65  #返回Ascll字符对应的整数
chr(65)==>A    #返回整数对应的asccl码
enumerate(parm1,parm2) #parm1接收list、dict,parm2指定起始值
range() #产生一个指定范围的序列,默认从0开始。例如:range(3)--->0,1,2

自定义函数

函数的定义主要有如下要点:

  • def:表示函数的关键字
  • 函数名:函数的名称,日后根据函数名调用函数
  • 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
  • 参数:为函数体提供数据
  • 返回值:当函数执行完毕后,可以给调用者返回数据。

参数分为:形式参数,默认参数,动态参数
形式参数:
def func(args)
1、又称为普通参数
默认参数:
def func(args1,a=None)
1、默认参数可以有一个或多个,但必须放在参数最后
2、可以给默认参数指定值来修改它的默认值

动态参数(一):
def func(*args):
1、接收多个参数(list、tuple)
2、内部自动将传入的参数构造成一个元组
3、序列,*,避免内部构造元组
动态参数(二):
def func(**kwargs):
只接收**dict和key=value类型的参数

posted @ 2015-11-14 11:36  杜瑞龙  阅读(85)  评论(0)    收藏  举报