首先要說明一下,只有在Python2中才有Xrange和range;Python3中沒有xrange,并且Python3中的range和Python2中的range有本質(zhì)的區(qū)別,所以說這里的區(qū)別,主要針對(duì)Python2來說一下。
我們提供的服務(wù)有:網(wǎng)站建設(shè)、網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、茶陵ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的茶陵網(wǎng)站制作公司
不同點(diǎn):
在py2中,range得到的是一個(gè)列表,即
X=range(0,5)
Print(type(X))#打印X的類型,結(jié)果是list
Print(X)#結(jié)果是[0,1,2,3,4]
Xrange得到的是一個(gè)生成器對(duì)象,即
X=xrange(0,5)
Print(type(X))#輸出類型,結(jié)果為一個(gè)生成對(duì)象
Print(X)#輸出X,結(jié)果為xrange(0,5)
共同點(diǎn):
它們的使用都是一樣的,比如都可以用for循環(huán)遍歷所有的值
Python3中為什么只有range呢?這個(gè)range其實(shí)就是py2中的xrange,而不是range,因?yàn)槭褂蒙善骺梢怨?jié)約內(nèi)存。
比如:代碼是for i in
range(0,1000),如果使用py2中的range,得到的結(jié)果是0到999的列表,會(huì)占用很大空間;但是如果使用生成器的話,就會(huì)節(jié)省很大的資源。
functools,用于高階函數(shù):指那些作用于函數(shù)或者返回其它函數(shù)的函數(shù)。
通常只要是可以被當(dāng)做函數(shù)調(diào)用的對(duì)象就是這個(gè)模塊的目標(biāo)。
里面包含如偏函數(shù) partial 等。
偏函數(shù)是將所要承載的函數(shù)作為partial()函數(shù)的第一個(gè)參數(shù),原函數(shù)的各個(gè)參數(shù)依次作為partial()函數(shù)后續(xù)的參數(shù),除非使用關(guān)鍵字參數(shù)。
通過語言描述可能無法理解偏函數(shù)是怎么使用的,那么就舉一個(gè)常見的例子來說明。在這個(gè)例子里,我們實(shí)現(xiàn)了一個(gè)取余函數(shù),對(duì)于整數(shù)100,取得對(duì)于不同數(shù)m的100%m的余數(shù)。
將函數(shù)作為參數(shù)傳入,這樣的函數(shù)稱為高階函數(shù)。 函數(shù)式編程就是指這種高度抽象的編程范式。
變量可以指向函數(shù),函數(shù)的參數(shù)能接收變量,那么一個(gè)函數(shù)就可以接收另一個(gè)函數(shù)作為參數(shù),這種函數(shù)就稱之為高階函數(shù)。如下所示:
map(fun, lst),將傳入的函數(shù)變量func作用到lst變量的每個(gè)元素中,并將結(jié)果組成新的列表返回。
定義一個(gè)匿名函數(shù)并調(diào)用,定義格式如--lambda arg1,arg2…:表達(dá)式
reduce把一個(gè)函數(shù)作用在一個(gè)序列[x1, x2, x3, …]上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算。
filter() 函數(shù)用于過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
閉包的定義?閉包本質(zhì)上就是一個(gè)函數(shù)
如何創(chuàng)建閉包?
如何使用閉包?典型的使用場景是裝飾器的使用。
global與nonlocal的區(qū)別:
簡單的使用如下:
偏函數(shù)主要輔助原函數(shù),作用其實(shí)和原函數(shù)差不多,不同的是,我們要多次調(diào)用原函數(shù)的時(shí)候,有些參數(shù),我們需要多次手動(dòng)的去提供值。
而偏函數(shù)便可簡化這些操作,減少函數(shù)調(diào)用,主要是將一個(gè)或多個(gè)參數(shù)預(yù)先賦值,以便函數(shù)能用更少的參數(shù)進(jìn)行調(diào)用。
我們?cè)賮砜匆幌缕瘮?shù)的定義:
類func = functools.partial(func, *args, **keywords)
我們可以看到,partial 一定接受三個(gè)參數(shù),從之前的例子,我們也能大概知道這三個(gè)參數(shù)的作用。簡單介紹下:
總結(jié)
本文是對(duì)Python 高階函數(shù)相關(guān)知識(shí)的分享,主題內(nèi)容總結(jié)如下:
3開始沒這個(gè)函數(shù)了,官方文檔是這么寫的
The cmp() function should be treated as gone, and the __cmp__() special method is no longer supported. Use __lt__() for sorting, __eq__() with __hash__(), and other rich comparisons as needed. (If you really need the cmp() functionality, you could use the expression (a b) - (a b) as the equivalent for cmp(a, b).)
大意就是cmp()函數(shù)已經(jīng)“離開”了,如果你真的需要cmp()函數(shù),你可以用表達(dá)式(a b) - (a b)代替cmp(a,b)