1,字典get用法
如果key没有值,返回一个None
>>> dic = {'k1':'v1','k2':'v2','k3':'v3'} >>> dic.get('k4') >>> p = dic.get('k4') >>> print p None
get(‘k4’,'k4')如果k4 没有值可以指定返回值,如果有值,则返回原有值
>>> dic.get('k4','v4') 'v4' >>> dic.get('k3','v4') 'v3' >>> dic.get('k2','v4') 'v2' >>> dic.get('k1','v4') 'v1'
2,字典的取值:
>>> dic.keys() ['k3', 'k2', 'k1'] >>> dic.values() ['v3', 'v2', 'v1'] >>> for k,v in dic.items(): ... print k,v ... k3 v3 k2 v2 k1 v1 >>> for k,v in dic.items(): ... print k,v, ... k3 v3 k2 v2 k1 v1 >>>
3,set
去除重复的元素。
t = set(['a','b','c'])
s = set(['a','b','c','d'])
集合支持一系列标准操作,包括并集、交集、差集和对称差集,例如:
a = t | s # t 和 s的并集
>>> a = t | s
>>> a
set(['a', 'c', 'b', 'd'])
b = t & s # t 和 s的交集
>>> b = t & s
>>> b
set(['a', 'c', 'b'])
c = t – s # 求差集(项在t中,但不在s中)
>>> c = t - s
>>> c
set([])
d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中)
基本操作:
t.add('x') # 添加一项
s.update([10,37,42]) # 在s中添加多项
4, input 输入的字符串可以使用json转成字典 使用json.loads(),例如:
>>> import json >>> s = raw_input() {"k1":"v1","k2":"v2"} #一点要是双引号 >>> type(s) <type 'str'> >>> dic = json.loads(s) >>> type(s) <type 'str'> >>> type(dic) <type 'dict'> >>>
5, OrderedDict,
使用dict
时,Key是无序的。在对dict
做迭代时,我们无法确定Key的顺序。
如果要保持Key的顺序,可以用OrderedDict
:
注意,OrderedDict
的Key会按照插入的顺序排列,不是Key本身排序:
>>> from collections import OrderedDict >>> t = dict([('a',1),('b',2),('c',3)]) >>> t {'a': 1, 'c': 3, 'b': 2} >>> s = OrderedDict([('a',1),('b',2),('c',3)]) >>> s OrderedDict([('a', 1), ('b', 2), ('c', 3)]) >>>
6,Counter
这是一个计数器,统计字符出现的次数。
>>> from collections import Counter >>> c = Counter() >>> a = 'asdfdscdcdfasad' >>> c = Counter(c) >>> c = Counter(a) >>> c Counter({'d': 5, 'a': 3, 's': 3, 'c': 2, 'f': 2}) >>>
7,默认字典:使用default为字典设置默认值
>>> from collections import defaultdict >>> l = defaultdict(list) >>> print l defaultdict(<type 'list'>, {}) >>> l['k1'].append('v1') >>> print l defaultdict(<type 'list'>, {'k1': ['v1']}) >>> l['k1'].append('v1.1') >>> print l defaultdict(<type 'list'>, {'k1': ['v1', 'v1.1']}) >>>
8.动态参数(函数)
>>> def show(*arg): ... print arg,type(arg) ... >>> show(123,123) (123, 123) <type 'tuple'> >>> >>> def show(**arg): ... print arg,type(arg) ... >>> show(n1=12,n2=123,n3=234) {'n1': 12, 'n2': 123, 'n3': 234} <type 'dict'> >>>
内置函数map,fillter
>>> l = [11,22,33,44] >>> newl = map(lambda x:x+100,l)# 也可以加函数map(函数名,l) >>> newl [111, 122, 133, 144]
>>> newl = map(lambda x:x+100,l)
>>> newl
[111, 122, 133, 144]
>>> def func(s):
... if s >133:
... return True
... else:
... return False
...
>>> n = filter(func,newl)
>>> n
[144]
zip的方法:
>>> l = [1,3,5,7] >>> s = [2,4,6,8] >>> k = zip(l ,s) >>> k [(1, 2), (3, 4), (5, 6), (7, 8)] >>>
9,迭代器和生成器
定义:一个函数调用时返回一个迭代器,那这个函数就叫生成器(generater),如果函数中包含yield语法,那这个函数就变成生成器
def cash_cut(amount): while amount >0: amount -= 100 yield 100 print("擦,有来取钱了。。。败家子") ATM = cash_cut(500) print(type(ATM)) print(ATM.__next__()) print(ATM.__next__()) print(ATM.__next__()) 输出: <class 'generator'> 100 擦,有来取钱了。。。败家子 100 擦,有来取钱了。。。败家子 100
yield单线程异步实例:
import time def customer(name): print('%s准备吃包子了'% name) while True: baozi = yield print('包子[%s]来了,被%s给吃了'%(baozi,name)) def product(): c1 = customer('W') c2 = customer('B') c1.__next__() c2.__next__() print('我要开始做包子了,你们先等会!') for i in range(10): time.sleep(1) print('我做了两个包子!') c1.send(i) c2.send(i) product()
10.装饰器例子
def login(func): def inner(arg): print('please user verify....') func(arg) return inner @login def tv(name): print('welcome [%s] look at tv' %name) tv('www')