[any material that should appear in print but not on the slide]
代码演示顺序... help() dir()
l=range(10)
N=100
l[:-2:2]
99表:
seed=range(1,10,1)
for i in seed: [i*j for j in seed[:i]]
[item for item in l if item > bound ]
In [154]: a=7
In [156]: [d for d in range(2,a-1)]
Out[156]: [2, 3, 4, 5]
In [155]: [a%d for d in range(2,a-1)]
Out[155]: [1, 1, 3, 2]
In [162]: a=8
In [163]: 0 not in [a%d for d in range(2,a-1)]
Out[163]: False
单行素数扫描!
In [167]: N=10
In [168]: [p for p in range(2,N) if 0 not in [p%d for d in range(2,p-1)]]
Out[168]: [2, 3, 5, 7]
参数:
工厂模式...
In [174]: def doit(do,i,j):
.....: done = "%s %s %s" % (i,do,j)
.....: print "want do::",done
.....: return eval(done)
In [125]: def myfun(*args):
.....: '''try function def
.....: '''
.....: print len(args),args
.....: return args[0]+args[1]
In [139]: def myfun(**kvar):
.....: print kvar
.....: for k in kvar:
.....: kvar[k]+=2
.....: print kvar
In [140]: myfun(k1=12,k2=23)
{'k2': 23, 'k1': 12}
{'k2': 25, 'k1': 14}
重载+
In [119]: class nplus:
.....: def __init__(self,init):
.....: self.one = init
.....: print "creat n plus obj"
.....: def __add__(self,two):
.....: return self.one*two
自省!!
In [89]: def repself(item):
....: print "ID :",id(item)
....: print "TYPE :",type(item)
....: print "VALUE :",repr(item)
....: if hasattr(item,"__name__"):print "NAME::",item.__name__
....: if hasattr(item,"__class__"):print "CLASS::",item.__class__.__name__
import traceback
In [200]: def callme():
.....: s = traceback.extract_stack()
.....: print "i'd call by %s !" % s[-2][2]
In [201]: fun1()
i'd call by fun1 !
MixIn:
In [202]: class A:
.....: def __init__(self):
.....: self.name = "class A"
.....: def do(self):
.....: print self.name
In [203]: class B:
.....: def __init__(self):
.....: self.name = "class B"
.....: def add(self,a,b):
.....: return a+b
In [212]: A.__bases__ +=(B,)
In [213]: A.
A.__doc__ A.__init__ A.__module__ A.add A.do
Pluin:::
def p2(self,*arg):print "in %s !!!! %s"%(self.name,arg)
setattr(A,"plugin",p2)
对象序列化:
In [234]: lis=[1,2,"as",[1,2],(2,3,3),{}]
In [235]: pickle.dump(lis,open("lisA.dump","w"))
In [237]: li2 = pickle.load(open("lisA.dump"))
In [238]: li2
Out[238]: [1, 2, 'as', [1, 2], (2, 3, 3), {}]
编译字节文件:
def myfunc(alist):
return len(alist)
the following command can be used to get the disassembly of myfunc():
import dis
>>> dis.dis(myfunc)
2 0 LOAD_GLOBAL 0 (len)
3 LOAD_FAST 0 (alist)
6 CALL_FUNCTION 1
9 RETURN_VALUE
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
函式编程
map(func, list, …)
相当于[func(l) for l in list]
In [241]: map((lambda x:x*x),range(10))
Out[241]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
In [254]: map((lambda x,y:x+y),range(0,10,1),range(10,0,-1))
Out[254]: [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
In [257]: a=range(1,10,2)
In [258]: a
Out[258]: [1, 3, 5, 7, 9]
In [259]: b=range(10,0,-2)
In [260]: b
Out[260]: [10, 8, 6, 4, 2]
In [264]: zip(a,b)
Out[264]: [(1, 10), (3, 8), (5, 6), (7, 4), (9, 2)]
In [101]: [(lambda x,y : x+y)(i,j) for i,j in zip(a,b)]
Out[101]: [11, 11, 11, 11, 11]
In [102]: ["%s-%s "%(i,j) for i,j in zip(a,b)]
Out[102]: ['1-10 ', '3-8 ', '5-6 ', '7-4 ', '9-2 ']