python學習心得
阿新 • • 發佈:2017-06-16
sta true red alt 用戶輸入 generator start rgs call
一,高級特性:
1,切片:[start:stop:step]
>>>l=range(6) >>>l[3,-1,2] resulte is [3]
2,叠代
2.1按itervalues()
>>> d={1:2,2:3,3:4} >>> for k in d: ... print k,d[k] ... 1 2 2 3 3 4
2.2 按iteritems()
>>> for v in d.iteritems(): ... print v ... (1, 2) (2, 3) (3, 4) 以元組形式返回
2.3 帶索引輸出:enumerate
>>> for i,value in enumerate([‘a‘,‘b‘,‘c‘]): ... print i,value ... 0 a 1 b 2 c
2.4 生成器:一邊循環一邊計算的機制,稱為生成器(Generator),有利於節省存儲空間,相當於鏈表中next
>>> def fib(max): ... n,a,b=0,0,1 ... while n<max: ... yield b ... a,b=b,a+b ... n=n+1 ... >>> fib(6) <generator object fib at 0x7f7f3c2b94b0> >>> for i in fib(6): ... print i ... 1 1 2 3 5 8
(二),函數式編程
1,高階函數:函數名當作方法的參數變量
>>> def add(x,y,abs): ... return abs(x)*abs(y) >>> def cut(x,add): ... return x-add(x,x,abs) ...>>> cut(1,add) 0
2,map
把用戶輸入的不規範的英文名字,變為首字母大寫,其他小寫的規範名字 map(lambda s :s.capitalize(),[‘AC‘,‘ac‘] [Ac,Ac]
reduce:
>>> l=map(lambda s:s.capitalize(),[‘AC‘,‘ac‘]) >>> reduce(lambda x,y:x+y,l) ‘AcAc‘
filter:
>>> import math >>> def isPrim(s): ... for i in range(2,int(math.sqrt(s)+1)): ... if s%i==0: ... return False ... return True ... >>> filter(isPrim,range(2,10)) [2, 3, 5, 7] >>> import time >>> print time.mktime(time.localtime())//時間計算 1497605034.0
3,sorted x>y 1,x<y -1 x==y 0
sorted([1,3,2],lambda x,y:y-x) //如果y-x>0則兩個數交換位置,使用冒泡排序 [3, 2, 1]
4,閉包(Closure),使用返回函數形式:
def count(): fs=[] for i in range(1,4) def f(j): def g(): return j*J return g fs.append(f(i)) return fs for i in count(): print i,j
5,匿名函數:lambda
6,“裝飾器”(Decorator):對方法進行增強說明,但有不去改變方法
import functools def log(args): """""" task = "call" def actual_log(func): @functools.wraps(func) def wrapper(*args,**kw): print ‘%s:%s()‘ % (task,func.__name__)//兩個下劃線 return func(*args, **kw) return wrapper if hasattr(args,‘__call__‘): return actual_log(args) else: task = args return actual_log @log def f(): pass @log("execute") def e(): pass
5,偏函數
>>> max2=functool.partial(max,10) //10作為*args的一部分自動加到左邊 >>> max2(1,3,4,5) 10
>>> def func(a,b,c):
>>> print a,b,c
>>>func2=functools.partial(func,b=3) 替換關鍵參數
>>>func(1,c=4)
1 3 4
python學習心得