国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

python學習筆記2

2019-11-14 12:41:04
字體:
來源:轉載
供稿:網友

高階函數

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

例如:

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

python內置的高階函數

map()

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

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

reduce()

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

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

filter()函數

filter()函數是 Python 內置的另一個有用的高階函數,filter()函數接收一個函數 f 和一個list,這個函數 f 的作用是對每個元素進行判斷,返回 True或 False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新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()函數

但 sorted()也是一個高階函數,它可以接收一個比較函數來實現自定義排序,比較函數的定義是,傳入兩個待比較的元素 x, y,如果 x 應該排在 y 的前面,返回 -1,如果 x 應該排在 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']

返回函數

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

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

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

閉包

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

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

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

輸出:

函數賦值給變量時執行函數賦值給變量時執行函數賦值給變量時執行接受函數的變量執行時調用9接受函數的變量執行時調用9接受函數的變量執行時調用9

匿名函數

關鍵字lambda 表示匿名函數,冒號前面的 x 表示函數參數。 匿名函數有個限制,就是只能有一個表達式,不寫return,返回值就是該表達式的結果。

# 返回字符串,首字母大寫,其他字母小寫>>> map(lambda s:s[:1].upper()+s[1:].lower(),['barT','lISA','maggie'])['Bart', 'Lisa', 'Maggie']# 返回列表大于0的數值# 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的裝飾器

如果定義了一個函數,想要在運行時候動態增加功能,又不想改動函數本身代碼

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

不帶參數的decorater

打印函數調用時間

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

帶參數的decorater

請給 @performace 增加一個參數,允許傳入’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

偏函數

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

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']
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 刚察县| 克什克腾旗| 咸宁市| 嘉定区| 花莲县| 易门县| 疏勒县| 常德市| 穆棱市| 中方县| 商城县| 安庆市| 佳木斯市| 威海市| 大冶市| 垫江县| 朝阳县| 伊宁县| 兴山县| 湄潭县| 双江| 宣恩县| 墨脱县| 津南区| 临安市| 文昌市| 兴文县| 天水市| 邢台县| 康保县| 固安县| 南陵县| 衢州市| 西峡县| 安图县| 长治市| 根河市| 潼南县| 探索| 江都市| 安仁县|