python学习笔记(三)

一、练习
练习:元素分类
有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66 , 'k2': 小于66}
 
 1 a = [11,22,33,44,55,66,77,88,99,90]
 2 tmp={}
 3 for b in a:
 4     if b<66:
 5         if 'k1' in tmp.keys():
 6             tmp['k1'].append(b)
 7         else:
 8             tmp['k1']=[b,]
 9     elif b>66:
10         if 'k2' in tmp.keys():
11             tmp['k2'].append(b)
12         else :
13             tmp['k2']=[b,]
14     else :
15         continue
16 print tmp
 
也可以这样实现:
1 from collections import defaultdict
2 values=[11,22,33,44,55,6,67,8,9,65,66,88]
3 my_dict=defaultdict(list)
4 for value in values:
5     if value<66:
6         my_dict['k1'].append(value)
7     else:
8         my_dict['k2'].append(value)
9 print my_dict

 

2、文件读取变字典
 1 axe|123|1
 2 eric|456|1
 3 tom|789|1
 4 ==>
 5 {'axe':['123','1'],'eric':['456','1'],'tom':['789','1']}                                                                                                                          
 6 tmp={}
 7 f=file('e:\est.txt','r')
 8 list_line=f.readlines()
 9 for list in list_line:
10     line_list=list.strip().split('|')
11     tmp[line_list[0]]=line_list[1:]
12 print tmp

 

二     collection
      作用:内置数据类型比如str, int, list, tuple, dict等的扩展数据类型。
 
1、计数器(Counter ——注意C大写)
     作用:主要用来计数, Counter是对字典类型的补充,用于追踪值的出现次数。
示例:
1 >>> import collections
2 >>> print collections.Counter('asdfadfasdffdfsadfadsfasd')
3 Counter({'d': 7, 'f': 7, 'a': 6, 's': 5})
4 >>> print collections.Counter(['a','ab','abc'] )
5 Counter({'a': 1, 'ab': 1, 'abc': 1})
 
2、 有序字典(OrderedDict  ——字母O和D要大写 )
     作用:orderedDict是对字典类型的补充,记住了字典的添加顺序。
     示例:
1 >>> dic={1:'a',3:'c',2:'b'}
2 >>> print collections.OrderedDict(dic)        
3 OrderedDict([(1, 'a'), (2, 'b'), (3, 'c')])                #处理完的结果是字典。

 

3、默认字典(defaultdict)
     作用:对字典类型的补充,给字典的value设定一个默认类型。
     示例:
          接上面的练习--刚才是创建一个value是列表的方式,现在创建一个默认的字典,value是list,直接追加就ok。
          有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
          即: {'k1': 大于66 , 'k2': 小于66}
     代码:
1 from collections import defaultdict
2 values=[11,22,33,44,55,6,67,8,9,65,66,88]
3 my_dict=defaultdict(list)
4 for value in values:
5     if value<66:
6         my_dict['k1'].append(value)
7     else:
8         my_dict['k2'].append(value)
9 print my_dict

 

4、可命名元组(namedtuple)
     作用:主要用于坐标
     示例:
1 import collections
2 mtuple=collections.namedtuple('mtuple',['x','y','z'])
3 nes=mtuple(1,2,3)
4 print nes
5 {'x':1,'y':2,'z':3}

 

5、双向队列(deque)
     与Queue.Queue的区别:Qqueue是单向队列,先进先出,deque是双向队列,线程安全。
     Queue示例:
1 import Queue
2 q = Queue.Queue(10)  #最多放10个
3 q.put(1)
4 q.put(12)
5 q.put(123)
6 print q.get()   #1
7 print q.get()   #12
8 print q.get()   #123

 

 deque示例:
1 import collections
2 q = collections.deque()
3 q.append(1)
4 q.append(2)
5 q.append(33)
6  
7 print q.count(2)
8 print q.popleft()
9 print q    
 
三     迭代器和生成器
1、迭代器(Iterator )
 
可迭代对象:Iterable
str、list、dict都是可迭代对象,但不是迭代器;
from collections import Iterable
print isinstance([],Iterable)  
True
 
迭代器:Iterator
from collections import Iterator
print isinstance([],Iterator)  
False
 
但是可以把'可迭代对象'(Iterable)转换用iter()转换为'迭代器'(Iterator)
print isinstance(iter([]),Iterator)
True
 
 
迭代器表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
 
2、生成器( generator )
 
按照某种算法推算出来,可以在循环的过程中不断推算出后续的元素,这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
1 >>> g = (x * x for x in range(10))
2 >>> g
3 <generator object <genexpr> at 0x00000000020256C0>
4 >>> next(g)    -->0
5 >>> next(g)    -->1
6 >>> next(g)    -->4
7 generator也是可迭代对象(Iterable),用for循环也可以;
 
如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator;
 
generator--yield--next()--StopIteration
 
     
四     内置函数(分类统计重点几个)
1、参数获取
 
help( object )
获取帮助
help(str.replace)
dir( object )
返回参数的属性、方法列表。
dir(list)
vars( object )
返回对象的所有变量,包括自定义的变量,都会显示出来
'__doc__': None  #获取注释信息
'__name__': '__main__' #是否是主模块
'__file__':   #文件路径
type( object )
返回对象类型
>>>type(my_dict)
<type 'dict'>
reload(temp)
重新加载模块
import后模块改变,重载时使用
id( object )
返回对象的唯一标识 (内存映射)
>>>id([12])
36372552L
is
返回bool值
>>> a is t
False
 
2、数学运算
 
abs(x)
求绝对值
abs(-9)
cmp(x,y) 比较大小
cmp(2,3)
bool(([x])
将x转换为Boolean类型
>>> bool(0)     -->False
>>> bool(1)     -->True
divmod(x,y)
取商和余数
divmod(10,3)
max( iterable[, args...][key] )
返回集合中的最大值
列表啥的都正常显示最大值,但集合只能显示key的最大值;
min(iterable[, args...][key])
返回集合中的最小值
列表啥的都正常显示最小值,但集合只能显示key的最小值;
sum(iterable[, start])
对集合求和
+
pow(x, y[, z]) 
返回x的y次幂
pow(2, 11)   --->2048
 
3、逻辑判断
 
len()
返回序列长度
>>>len([1,2,3,4])   -->4
all(iterable)
1、集合中的元素都为真的时候为真
2、特别的,若为空串返回为True
li=[1,'abc','']
>>>all(li) ----->False  #因为有空字符串
any(iterable)
1、集合中的元素有一个为真的时候为真
2、特别的,若为空串返回为False
 
cmp(x, y)
如果x < y ,返回负数;x == y, 返回0;x > y,返回正数
>>> cmp(1,2)  -->-1
>>> cmp(1,1)  -->0
>>> cmp(3,2)  -->1
 
4、进制转换
chr(i)
输入数字返回字符
chr()函数返回ASCII码对应的字符串。
>>> chr(90)   --->'Z'
ord(x)
输入字符返回数字
ord()函数返回一个字符串参数的ASCII码或Unicode值。
>>> ord('a') ---->97
hex(x)
hex()函数可把整数转换成十六进制数
>>> hex(10)
'0xa'
oct(x)
oct()函数可把给出的整数转换成八进制数
>>> oct(10)
'012'
bin(x)
将整数x转换为二进制字符串
>>> bin(10)
'0b1010'
 
5、range和xrange
range([lower,]stop[,step])
range()函数可按参数生成连续的有序整数列表
>>> range(10) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> range(1,10) 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> range(1,10,2) 
[1, 3, 5, 7, 9]
xrange([lower,]stop[,step])
 
 
xrange()函数与range()类似,但xrnage()并不创建列表,而是返回一个xrange对象,它的行为
与列表相似,但是只在需要时才计算列表值,当列表很大时,这个特性能为我们节省内存.
>>> a=xrange(10) 
>>> print a[0] 

>>> print a[1] 
 
6、enumerate()
enumerate(sequence [, start = 0])
返回下标和参数,后面那个可以指定起始值,默认是从0开始。
例:
1 li=['a','b','c']
2 for k,v in enumerate(li,1):
3     print k,v
4 1 a
5 2 b
6 3 c

 

7、map
map(),对所有值进行一个处理;
filter(),对值进行过滤;
groupby(),对值进行分组;
reduce(),计算。
学完函数再回来看。
 
 
五     文件操作
 
      在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文 件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
1、操作模式
 
r
(默认)只读模式
r+
读写,可读,可写,可追加
w
写模式,有此文件清空,无则创建
a
追加模式,(不管光标定位到什么地方,追加的时候总是到最后)
w+、a+
无意义
rU
U代表可以将任意换行符都转换成'\n'
rb\wb\ab
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
 
2、with用法
为了避免打开文件后忘记关闭,可以通过管理上下文;当with代码块执行完毕时,内部会自动关闭并释放文件资源。 
1 with open('/path/to/file', 'r') as f:
2   print(f.read()) 
也可以同时创建多个文件描述符:

1 with open('log1') as obj1, open('log2') as obj2:

2   pass 

 

六     自定义函数
 
1、定义函数
在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
def 函数名(参数):
     ……
     函数体
     ……

 

def:表示函数的关键字
函数名:函数的名称,日后根据函数名调用函数
函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
参数:为函数体提供数据
返回值:当函数执行完毕后,可以给调用者返回数据。
 
2、函数返回值
     函数体内部可以用return随时返回函数结果;
     函数执行完毕也没有return语句时,自动return None。
     函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。
     函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。
     如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return。           
 
3、函数的参数:
     ①普通参数
           函数定义的叫形参,执行时传入的是实参。
     ②默认参数
           必选参数在前,默认参数在后
     ③动态参数
           传入多个数值
           可变参数:*nums表示把nums这个list的所有元素作为可变参数传进去。
           关键字参数:**nums 函数的调用者可以传入任意不受限制的关键字参数。
           例:
1 def person(name, age, **kw):
  print('name:', name, 'age:', age, 'other:', kw)
           函数person除了必选参数name和age外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数;
注意:
*args是可变参数,args接收的是一个tuple;
**kw是关键字参数,kw接收的是一个dict。
     ④参数组合
          在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用,除了可变参数无法和命名关键字参数混合。但是请注意,参数定义的顺序必须是:     必选参数、默认参数、可变参数/命名关键字参数和关键字参数。    
1 def f1(a, b, c=0, *args, **kw):
2     print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
 
 
 
posted @ 2015-11-11 13:42  大亮头  阅读(271)  评论(0)    收藏  举报