麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

python學(xué)習(xí)筆記2

2019-11-14 12:40:22
字體:
供稿:網(wǎng)友

高階函數(shù)

通俗的來講,python的高階函數(shù)的形參變量可以接受函數(shù),類似于c語言的函數(shù)指針

例如:

# 變量f可以傳入一個函數(shù)def add(a,b,f): return f(a)+f(b)add(-5,5,abs)#輸出結(jié)果是10

python內(nèi)置的高階函數(shù)

map()

map()是 Python 內(nèi)置的高階函數(shù),它接收一個函數(shù) f 和一個 list,并通過把函數(shù) f 依次作用在 list 的每個元素上,得到一個新的 list 并返回。

def format_name(s): return s[:1].upper()+s[1:].lower()PRint map(format_name, ['adam', 'LISA', 'barT'])

reduce()

reduce()函數(shù)也是Python內(nèi)置的一個高階函數(shù)。reduce()函數(shù)接收的參數(shù)和 map()類似,一個函數(shù) f,一個list,但行為和 map()不同,reduce()傳入的函數(shù) f 必須接收兩個參數(shù),reduce()對list的每個元素反復(fù)調(diào)用函數(shù)f,并返回最終結(jié)果值

def prod(x, y): return x*yprint reduce(prod, [2, 4,5])#輸出:40print reduce(prod, [2, 4,5],10)#輸出 400,先計算[..],在把10傳入

filter()函數(shù)

filter()函數(shù)是 Python 內(nèi)置的另一個有用的高階函數(shù),filter()函數(shù)接收一個函數(shù) f 和一個list,這個函數(shù) f 的作用是對每個元素進(jìn)行判斷,返回 True或 False,filter()根據(jù)判斷結(jié)果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。

import mathdef is_sqr(x): return math.sqrt(x)%1==0 print filter(is_sqr, range(1,101))# 輸出:# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

sorted()函數(shù)

但 sorted()也是一個高階函數(shù),它可以接收一個比較函數(shù)來實現(xiàn)自定義排序,比較函數(shù)的定義是,傳入兩個待比較的元素 x, y,如果 x 應(yīng)該排在 y 的前面,返回 -1,如果 x 應(yīng)該排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。

def cmp_ignore_case(s1, s2): if s1.lower() < s2.lower(): return -1 elif s1.lower() > s2.lower(): return 1 else: return 0print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)# 輸出:# ['about', 'bob', 'Credit', 'Zoo']

返回函數(shù)

Python的函數(shù)不但可以返回int、str、list、dict等數(shù)據(jù)類型,還可以返回函數(shù)

函數(shù)calc_prod(lst),它接收一個list,返回一個函數(shù),返回函數(shù)可以計算參數(shù)的乘積

def calc_prod(lst): def prod(x,y): return x*y def lazy_prod(): return reduce(prod,lst) return lazy_prodf = calc_prod([1, 2, 3, 4])print f()# 輸出:24

閉包

內(nèi)層函數(shù)引用了外層函數(shù)的變量(參數(shù)也算變量),然后返回內(nèi)層函數(shù)的情況,稱為閉包(Closure)。

閉包的特點是返回的函數(shù)還引用了外層函數(shù)的局部變量,所以,要正確使用閉包,就要確保引用的局部變量在函數(shù)返回后不能變。

# -*- coding: utf-8 -*-def count(): fs = [] for i in range(1, 4): print '函數(shù)賦值給變量時執(zhí)行' def f(): print '接受函數(shù)的變量執(zhí)行時調(diào)用' return i*i fs.append(f) return fsf1, f2, f3 = count()print f1()print f2()print f3()

輸出:

函數(shù)賦值給變量時執(zhí)行函數(shù)賦值給變量時執(zhí)行函數(shù)賦值給變量時執(zhí)行接受函數(shù)的變量執(zhí)行時調(diào)用9接受函數(shù)的變量執(zhí)行時調(diào)用9接受函數(shù)的變量執(zhí)行時調(diào)用9

匿名函數(shù)

關(guān)鍵字lambda 表示匿名函數(shù),冒號前面的 x 表示函數(shù)參數(shù)。 匿名函數(shù)有個限制,就是只能有一個表達(dá)式,不寫return,返回值就是該表達(dá)式的結(jié)果。

# 返回字符串,首字母大寫,其他字母小寫>>> map(lambda s:s[:1].upper()+s[1:].lower(),['barT','lISA','maggie'])['Bart', 'Lisa', 'Maggie']# 返回列表大于0的數(shù)值# lambda x: True if x>0 else False解釋:# 傳入x,x>0返回True否則返回False>>> print filter(lambda x: True if x>0 else False,[-1,1,-2,2,-3,3] )[1, 2, 3]

python的裝飾器

如果定義了一個函數(shù),想要在運(yùn)行時候動態(tài)增加功能,又不想改動函數(shù)本身代碼

>>> def f_old(x):... return x*x...>>> def f_new(f):... def fn(x):... print 'fn()...'... return f(x)... return fn...# 第一種調(diào)用方法>>> g = f_new(f_old)>>> g(3)fn()...9# 第二種調(diào)用方法,完全隱藏了f_old()函數(shù)>>> f_old=f_new(f_old)>>> f_old(3)fn()...9# 第三種>>> @f_new... def f2(x):... return 2*x...>>> f2(3)fn()...6

不帶參數(shù)的decorater

打印函數(shù)調(diào)用時間

import timedef performance(f): def fn(*args,**kw): t1=time.time() res=f(*args,**kw) t2=time.time() #print 'call'+f.__name__+'()...'+(t2-t1) print 'call %s() in %fs' %(f.__name__, (t2 - t1)) return res return fn@performancedef factorial(n): return reduce(lambda x,y: x*y, range(1, n+1))print factorial(10)# 輸出:# call factorial() in 0.000696s# 3628800

帶參數(shù)的decorater

請給 @performace 增加一個參數(shù),允許傳入’s’或’ms’:

import timedef performance(unit): def log(f): def fn(*args,**kw): t1 = time.time() res = f(*args,**kw) t2 = time.time() if unit == 'ms': t = (t2-t1)*1000 else: t= t2-t1 print ('call %s() in %f %s')%(f.__name__,t,unit) return res return fn return log@performance('s')def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1))print factorial(10)# 輸出:# call factorial() in 0.005046 s# 3628800

偏函數(shù)

簡化函數(shù)的參數(shù)默認(rèn)值 例子中sorted函數(shù)的參數(shù)有兩個(list,cmp),第一個是列表,第二個是重寫的比較函數(shù)

import functoolssorted_ignore_case = functools.partial(sorted,cmp=lambda a,b:cmp(a.upper(),b.upper()))print sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit'])# 輸出:# ['about', 'bob', 'Credit', 'Zoo']
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 天天草天天干天天 | a免费视频 | 久久精热 | 蜜桃视频在线免费观看 | 天天色综合6 | 久久久毛片视频 | 在线影院av| 国产日韩在线观看一区 | 久久久一区二区三区视频 | 欧美一区2区三区4区公司二百 | 免费一区二区三区 | 欧美xxxxx视频| 久久91久久久久麻豆精品 | 1314av| 国产一级二级在线播放 | 久草在线综合 | 性明星video另类hd | 北京一级毛片 | 欧美伦理一区二区 | 成人午夜影院 | 毛片大全 | 国产精品久久久久久久午夜片 | 久久99精品久久久久久秒播放器 | 亚洲成人福利 | 国产成年人视频 | 精品国产91久久久久久 | 欧美亚洲国产一区 | 久久视频精品 | 国产区二区| 羞羞的视频在线免费观看 | 精品国产99久久久久久宅男i | 羞羞视频免费观看网站 | 亚洲成人福利网站 | 高清成人在线 | 日韩激情一区二区三区 | 国产外围在线 | 看黄在线观看 | www.成人在线 | 草人人 | 国产一区二区三区四区五区精品 | 在线成人免费观看视频 |