1. 程式人生 > >python學習心得

python學習心得

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學習心得