真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python函數(shù)優(yōu)先等級(jí) python 優(yōu)先級(jí)

Python 函數(shù)進(jìn)階-高階函數(shù)

高階函數(shù)就是能夠把函數(shù)當(dāng)成參數(shù)傳遞的函數(shù)就是高階函數(shù),換句話說(shuō)如果一個(gè)函數(shù)的參數(shù)是函數(shù),那么這個(gè)函數(shù)就是一個(gè)高階函數(shù)。

站在用戶的角度思考問題,與客戶深入溝通,找到西盟網(wǎng)站設(shè)計(jì)與西盟網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋西盟地區(qū)。

高階函數(shù)可以是你使用 def 關(guān)鍵字自定義的函數(shù),也有Python系統(tǒng)自帶的內(nèi)置高階函數(shù)。

我們下面的例子中,函數(shù) senior 的參數(shù)中有一個(gè)是函數(shù),那么senior就是一個(gè)高階函數(shù);函數(shù) tenfold 的參數(shù)不是函數(shù),所以tenfold就只是一個(gè)普通的函數(shù)。

function:函數(shù),可以是 自定義函數(shù) 或者是 內(nèi)置函數(shù);

iterable:可迭代對(duì)象,可迭代性數(shù)據(jù)。(容器類型數(shù)據(jù)和類容器類型數(shù)據(jù)、range對(duì)象、迭代器)

把可迭代對(duì)象中的數(shù)據(jù)一個(gè)一個(gè)拿出來(lái),然后放在到指定的函數(shù)中做處理,將處理之后的結(jié)果依次放入迭代器中,最后返回這個(gè)迭代器。

將列表中的元素轉(zhuǎn)成整型類型,然后返回出來(lái)。

列表中的每一個(gè)數(shù)依次乘 2的下標(biāo)索引+1 次方。使用自定義的函數(shù),配合實(shí)現(xiàn)功能。

參數(shù)的意義和map函數(shù)一樣

filter用于過濾數(shù)據(jù),將可迭代對(duì)象中的數(shù)據(jù)一個(gè)一個(gè)的放入函數(shù)中進(jìn)行處理,如果函數(shù)返回值為真,將數(shù)據(jù)保留;反之不保留,最好返回迭代器。

保留容器中的偶數(shù)

參數(shù)含義與map、filter一致。

計(jì)算數(shù)據(jù),將可迭代對(duì)象的中的前兩個(gè)值放在函數(shù)中做出運(yùn)算,得出結(jié)果在和第三個(gè)值放在函數(shù)中運(yùn)算得出結(jié)果,以此類推,直到所有的結(jié)果運(yùn)算完畢,返回最終的結(jié)果。

根據(jù)功能我們就應(yīng)該直到,reduce中的函數(shù)需要可以接收兩個(gè)參數(shù)才可以。

將列表中的數(shù)據(jù)元素組合成為一個(gè)數(shù),

iterable:可迭代對(duì)象;

key:指定函數(shù),默認(rèn)為空;

reverse:排序的方法,默認(rèn)為False,意為升序;

如果沒有指定函數(shù),就單純的將數(shù)據(jù)安札ASCII進(jìn)行排序;如果指定了函數(shù),就將數(shù)據(jù)放入函數(shù)中進(jìn)行運(yùn)算,根據(jù)數(shù)據(jù)的結(jié)果進(jìn)行排序,返回新的數(shù)據(jù),不會(huì)改變?cè)械臄?shù)據(jù)。

注意,如果指定了函數(shù),排序之后是根據(jù)數(shù)據(jù)的結(jié)果對(duì)原數(shù)據(jù)進(jìn)行排序,而不是排序計(jì)算之后的就結(jié)果數(shù)據(jù)。

將列表中的數(shù)據(jù)進(jìn)行排序。

還有一點(diǎn)就是 sorted 函數(shù)可以將數(shù)據(jù)放入函數(shù)中進(jìn)行處理,然后根據(jù)結(jié)果進(jìn)行排序。

既然有了列表的內(nèi)置函數(shù)sort,為什么我們還要使用sorted函數(shù)呢?

高階函數(shù)就是將函數(shù)作為參數(shù)的函數(shù)。

文章來(lái)自

一文讀懂Python 高階函數(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)建閉包?

如何使用閉包?典型的使用場(chǎng)景是裝飾器的使用。

global與nonlocal的區(qū)別:

簡(jiǎn)單的使用如下:

偏函數(shù)主要輔助原函數(shù),作用其實(shí)和原函數(shù)差不多,不同的是,我們要多次調(diào)用原函數(shù)的時(shí)候,有些參數(shù),我們需要多次手動(dòng)的去提供值。

而偏函數(shù)便可簡(jiǎn)化這些操作,減少函數(shù)調(diào)用,主要是將一個(gè)或多個(gè)參數(shù)預(yù)先賦值,以便函數(shù)能用更少的參數(shù)進(jìn)行調(diào)用。

我們?cè)賮?lái)看一下偏函數(shù)的定義:

類func = functools.partial(func, *args, **keywords)

我們可以看到,partial 一定接受三個(gè)參數(shù),從之前的例子,我們也能大概知道這三個(gè)參數(shù)的作用。簡(jiǎn)單介紹下:

總結(jié)

本文是對(duì)Python 高階函數(shù)相關(guān)知識(shí)的分享,主題內(nèi)容總結(jié)如下:

享學(xué)課堂淺談Python序列內(nèi)建函數(shù)都有哪些

1、Python類型操作符和內(nèi)建函數(shù)總結(jié)

表4.5列出了所有操作符和內(nèi)建函數(shù),其中操作符順序是按優(yōu)先級(jí)從高到低排列的。同一種灰度的操作符擁有同樣的優(yōu)先級(jí)。注意在operator模塊中有這些(和絕大多數(shù)Python)操作符相應(yīng)的同功能的函數(shù)可供使用。

表4.5 標(biāo)準(zhǔn)類型操作符和內(nèi)建函數(shù)

操作符/函數(shù)

描 述

結(jié) 果a

字符串表示

``

對(duì)象的字符串表示

str

內(nèi)建函數(shù)

cmp(obj1, obj2)

比較兩個(gè)對(duì)象

int

repr(obj)

對(duì)象的字符串表示

str

str(obj)

對(duì)象的字符串表示

str

type(obj)

檢測(cè)對(duì)象的類型

type

值比較

小于

bool

大于

bool

=

小于或等于

bool

=

大于或等于

bool

==

等于

bool

!=

不等于

bool

不等于

bool

對(duì)象比較

is

bool

is not

不是

bool

布爾操作符

not

邏輯反

bool

and

邏輯與

bool

or

邏輯或

bool

2、Python數(shù)值類型操作符和內(nèi)建函數(shù)

一、工廠函數(shù)

數(shù)值工廠函數(shù)總結(jié)類(工廠函數(shù)) 操作

bool(obj) b 返回obj對(duì)象的布爾值,也就是 obj.__nonzero__()方法的返回值。

int(obj, base=10)   返回一個(gè)字符串或數(shù)值對(duì)象的整數(shù)表 示, 類似string.atoi();

從Python 1.6起, 引入了可選的進(jìn)制參數(shù)。

long(obj, base=10) 返回一個(gè)字符或數(shù)據(jù)對(duì)象的長(zhǎng)整數(shù)表 示,類似string.atol(),

從Python1.6起, 引入了可選的進(jìn)制參數(shù) float(obj) ,

返回一個(gè)字符串或數(shù)據(jù)對(duì)象的浮點(diǎn)數(shù) 表示,類似string.atof()。

complex(str) or返回一個(gè)字符串的復(fù)數(shù)表示,或 者根據(jù)給定的實(shí)數(shù),

complex(real, imag=0.0) ?。耙粋€(gè)可選 的虛數(shù)部分)生成一個(gè)復(fù)數(shù)對(duì)象。

二、內(nèi)建函數(shù)

1、分類

Python 有五個(gè)運(yùn)算內(nèi)建函數(shù)用于數(shù)值運(yùn)算:

abs(num), coerce(num1,num2), divmod(num1,num2), pow(num1,num2,mod=1)和 round(flt,ndig=0)

其中abs()返回給定參數(shù)的絕對(duì)值。如果參數(shù)是一個(gè)復(fù)數(shù), 那么就返回math.sqrt(num.real2 + num.imag2).

coerce()是一個(gè)數(shù)據(jù)類型轉(zhuǎn)換函數(shù),不過它的行為更像一個(gè)運(yùn)算符.數(shù)coerce()為程序員提供了不依賴Python 解釋器,而是自定義兩個(gè)數(shù)值類型轉(zhuǎn)換的方法。對(duì)一種新創(chuàng)建的數(shù)值類型來(lái)說(shuō), 這個(gè)特性非常有用.函數(shù)coerce()僅返回一個(gè)包含類型轉(zhuǎn)換完畢的兩個(gè)數(shù)值元素的元組.

divmod()內(nèi)建函數(shù)把除法和取余運(yùn)算結(jié)合起來(lái), 返回一個(gè)包含商和余數(shù)的元組.對(duì)整數(shù)來(lái)說(shuō),它的返回值就是地板除和取余操作的結(jié)果.對(duì)浮點(diǎn)數(shù)來(lái)說(shuō),返回的商部分是math.floor(num1/num2),對(duì)復(fù)數(shù)來(lái)說(shuō),商部分是ath.floor((num1/num2).real).

pow()它和雙星號(hào) (**)運(yùn)算符都可以進(jìn)行指數(shù)運(yùn)算.不過二者的區(qū)別并不僅僅在于一個(gè)是運(yùn)算符,一個(gè)是內(nèi)建函數(shù).在Python 1.5 之前,并沒有 ** 運(yùn)算符,內(nèi)建函數(shù)pow()還接受第三個(gè)可選的參數(shù),一個(gè)余數(shù)參數(shù).如果有這個(gè)參數(shù)的, pow() 先進(jìn)行指數(shù)運(yùn)算,然后將運(yùn)算結(jié)果和第三個(gè)參數(shù)進(jìn)行取余運(yùn)算.這個(gè)特性主要用于密碼運(yùn)算,并且比 pow(x,y) % z 性能更好, 這是因?yàn)檫@個(gè)函數(shù)的實(shí)現(xiàn)類似于C 函數(shù)pow(x,y,z).

round()用于對(duì)浮點(diǎn)數(shù)進(jìn)行四舍五入運(yùn)算。它有一個(gè)可選的小數(shù)位數(shù)參數(shù).如果不提供小數(shù)位參數(shù), 它返回與第一個(gè)參數(shù)最接近的整數(shù)(但仍然是浮點(diǎn)類型).第二個(gè)參數(shù)告訴round 函數(shù)將結(jié)果精確到小數(shù)點(diǎn)后指定位數(shù).

2、函數(shù)int()/round()/math.floor()它們之間的不同之處:

函數(shù) int()直接截去小數(shù)部分.(返回值為整數(shù))

函數(shù) floor() 得到最接近原數(shù)但小于原數(shù)的整數(shù).(返回值為浮點(diǎn)數(shù))

函數(shù) round() 得到最接近原數(shù)的整數(shù).(返回值為浮點(diǎn)數(shù))

3、進(jìn)制轉(zhuǎn)換函數(shù):

返回字符串表示的8 進(jìn)制和16 進(jìn)制整數(shù),它們分別是內(nèi)建函數(shù):

oct()和 hex(). oct(255)='0377'/hex(255)='0xff'

函數(shù)chr()接受一個(gè)單字節(jié)整數(shù)值(0到255),返回一個(gè)字符串(ASCII),其值為對(duì)應(yīng)的字符.chr(97)='a'

函數(shù)ord()則相反,它接受一個(gè)字符(ASCII 或 Unicode),返回其對(duì)應(yīng)的整數(shù)值.ord('A')=65

3、Python字符串函數(shù)

(一)標(biāo)準(zhǔn)類型操作符和標(biāo)準(zhǔn)內(nèi)建函數(shù)

1)、標(biāo)準(zhǔn)類型操作符

,,=,=,==,!=,對(duì)象值得比較

注:做比較時(shí)字符串是按ASCII值的大小來(lái)比較的

is 對(duì)象身份比較

and,or,not 布爾類型

2)標(biāo)準(zhǔn)內(nèi)建函數(shù)

type(obj)

cmp(obj1,obj2)

str(obj)和repr(obj) 或反引號(hào)運(yùn)算符(``) 可以方便的以字符串的方式獲取對(duì)象的

內(nèi)容、類型、數(shù)值屬性等信息。str()函數(shù)得到的字符串可讀性好, 而repr()函數(shù)得到的字符

串通??梢杂脕?lái)重新獲得該對(duì)象, 通常情況下 obj == eval(repr(obj)) 這個(gè)等式是成立的

isinstance(obj,type) 判斷對(duì)象的類型

(二)序列操作

1、序列操作

字符串屬于序列對(duì)象,可以使用所有序列的操作和函數(shù)

切片 [] [:] [::]

簡(jiǎn)單總結(jié):

*索引(S[i])獲取特定偏移的元素。

——第一個(gè)元素偏移為0

——(S[0])獲取第一個(gè)元素。

——負(fù)偏移索引意味著從最后或右邊反向進(jìn)行計(jì)數(shù)

——(S[-2])獲取倒數(shù)第二個(gè)元素(就像S[len(s)-2]一樣

*分片[S[i:j]提取對(duì)應(yīng)的部分作為一個(gè)序列

——右邊界不包含在內(nèi)

——分片的邊界默認(rèn)為0和序列的長(zhǎng)度,如果沒有給出的話S[:]

——(S[1:3])獲取了從偏移為1,直到但不包括偏移為3的元素

——(S[1:])獲取從偏移為1到末尾之間的元素

——(S[:3])獲取從偏移為0直到但不包括偏移為3的元素

——(S[:-1])獲取從偏移為0直到但不包括最后一個(gè)元素之間的元素

——(S[:])獲取從偏移為0到末尾之間的元素,這有效地實(shí)現(xiàn)了頂層S拷貝

拷貝了一個(gè)相同值,但是是不同內(nèi)存區(qū)域的對(duì)象。對(duì)象字符串這樣不可變的對(duì)象不是很有用,但是對(duì)于可以實(shí)地修改的對(duì)象來(lái)說(shuō)很有用。

比如列表。

擴(kuò)展分片:第三個(gè)限制值 【步進(jìn)】

完整形式:X[I:J:K]:這標(biāo)識(shí)索引X對(duì)象的元素,從偏移為I直到J-1,每隔K元素索引一次。第三個(gè)限制值,K,默認(rèn)為1

實(shí)例

Python Code

1

2

3

4

5

S='abcdefghijk'

S[1:10]

'bcdefghij'

S[1:10:2]

'bdfhj

也可以使用負(fù)數(shù)作為步進(jìn)。

分片表達(dá)式

Python Code

1

2

"hello"[::-1]

'olleh'

通過負(fù)數(shù)步進(jìn),兩個(gè)邊界的意義實(shí)際上進(jìn)行了反轉(zhuǎn)。

3、成員操作符 in ,not in

返回布爾值True 或False

可以使用string模塊來(lái)判斷輸入字符的合法性,可見成品中的idcheck.py

4、字符串連接

+ 連接字符串 ‘name’+' '+'jin'

字符串格式化 '%s %s' % ('name','jin')

join()方法 ' '.join(('name','jin')) ' '.join(['name','jin'])

5、刪除清空字符串

del aString

aString=''

(三)、序列函數(shù)

序列類型函數(shù)

len(str) 返回字串的長(zhǎng)度

enumerate(iter):接受一個(gè)可迭代對(duì)象作為參數(shù),返回一個(gè)enumerate

max(str)/min(str):max()和min()函數(shù)對(duì)其他的序列類型可能更有用,但對(duì)于string類型它們能很好地運(yùn)行,返回最大或者最小的字符(按照ASCII 碼值排列),

zip([it0, it1,... itN]) 返回一個(gè)列表,其第一個(gè)元素是it0,it1,...這些元素的第一個(gè)元素組成的一個(gè)元組,第二個(gè)...,類推.

reversed(seq)c 接受一個(gè)序列作為參數(shù),返回一個(gè)以逆序訪問的迭代器(PEP 322)

sorted(iter,func=None,key=None,reverse=False) 接受一個(gè)可迭代對(duì)象作為參數(shù),返回一個(gè)有序的列表;可選參數(shù)func,key 和reverse 的含義跟list.sort()內(nèi)建函數(shù)的參數(shù)含義一樣.

注意:

sorted等需要在原處修改的函數(shù)無(wú)法用在字符串對(duì)象,但可以產(chǎn)生新的對(duì)象

sum處理的對(duì)象是數(shù)字,不能用在字符串

sorted(s)

['a', 'e', 'e', 'g', 'g', 'g', 'o']

(四)只適合于字符串類型的函數(shù)

1)raw_input()函數(shù)

內(nèi)建的raw_input()函數(shù)使用給定字符串提示用戶輸入并將這個(gè)輸入返回,下面是一個(gè)使

用raw_input()的例子:

user_input = raw_input("Enter your name: ")

prin user_input

2)str() and unicode()

str()和unicode()函數(shù)都是工廠函數(shù),就是說(shuō)產(chǎn)生所對(duì)應(yīng)的類型的對(duì)象.它們接受一個(gè)任

意類型的對(duì)象,然后創(chuàng)建該對(duì)象的可打印的或者Unicode 的字符串表示. 它們和basestring 都

可以作為參數(shù)傳給isinstance()函數(shù)來(lái)判斷一個(gè)對(duì)象的類型

3)chr(), unichr(), and ord()

chr()函數(shù)用一個(gè)范圍在range(256)內(nèi)的(就是0 到255)整數(shù)做參數(shù),返回一個(gè)對(duì)應(yīng)的字符.unichr()跟它一樣,只不過返回的是Unicode 字符

ord()函數(shù)是chr()函數(shù)(對(duì)于8 位的ASCII 字符串)或unichr()函數(shù)(對(duì)于Unicode 對(duì)象)

的配對(duì)函數(shù),它以一個(gè)字符(長(zhǎng)度為1 的字符串)作為參數(shù),返回對(duì)應(yīng)的ASCII 數(shù)值,或者Unicode

數(shù)值,如果所給的Unicode 字符超出了你的Python 定義范圍,則會(huì)引發(fā)一個(gè)TypeError 的異常

(五)、只適用于字符串的操作符

1、格式化操作符 %

字符串格式化符號(hào)

格式化字符 轉(zhuǎn)換方式

%c 轉(zhuǎn)換成字符(ASCII 碼值,或者長(zhǎng)度為一的字符串)

%ra 優(yōu)先用repr()函數(shù)進(jìn)行字符串轉(zhuǎn)換

%s 優(yōu)先用str()函數(shù)進(jìn)行字符串轉(zhuǎn)換

%d / %i 轉(zhuǎn)成有符號(hào)十進(jìn)制數(shù)

%ub 轉(zhuǎn)成無(wú)符號(hào)十進(jìn)制數(shù)

%ob 轉(zhuǎn)成無(wú)符號(hào)八進(jìn)制數(shù)

%xb/%Xb (Unsigned)轉(zhuǎn)成無(wú)符號(hào)十六進(jìn)制數(shù)(x/X 代表轉(zhuǎn)換后的十六進(jìn)制字符的大

小寫)

%e/%E 轉(zhuǎn)成科學(xué)計(jì)數(shù)法(e/E 控制輸出e/E)

%f/%F 轉(zhuǎn)成浮點(diǎn)數(shù)(小數(shù)部分自然截?cái)?

%g/%G %e 和%f/%E 和%F 的簡(jiǎn)寫

%% 輸出%

格式化操作符輔助指令

符號(hào) 作用

* 定義寬度或者小數(shù)點(diǎn)精度

- 用做左對(duì)齊

+ 在正數(shù)前面顯示加號(hào)( + )

sp 在正數(shù)前面顯示空格

# 在八進(jìn)制數(shù)前面顯示零('0'),在十六進(jìn)制前面顯示'0x'或者'0X'(取決于

用的是'x'還是'X')

0 顯示的數(shù)字前面填充‘0’而不是默認(rèn)的空格

% '%%'輸出一個(gè)單一的'%'

(var) 映射變量(字典參數(shù))

m.n m 是顯示的最小總寬度,n 是小數(shù)點(diǎn)后的位數(shù)(如果可用的話)

2、字符串模板: 更簡(jiǎn)單的替代品

由于新式的字符串Template 對(duì)象的引進(jìn)使得string 模塊又重新活了過來(lái),Template 對(duì)象

有兩個(gè)方法,substitute()和safe_substitute().前者更為嚴(yán)謹(jǐn),在key 缺少的情況下它會(huì)報(bào)一

個(gè)KeyError 的異常出來(lái),而后者在缺少key 時(shí),直接原封不動(dòng)的把字符串顯示出

3、原始字符串操作符( r/R )

字符串抑制轉(zhuǎn)義r'帶特殊符號(hào)的字串'

myfile=open(r'C:\new\text.data','w')

4、Unicode 字符串操作符( u/U )

u'abc' U+0061 U+0062 U+0063

u'\u1234' U+1234

u'abc\u1234\n' U+0061 U+0062 U+0063 U+1234 U+0012

(六)字符串對(duì)象的方法:

1、刪減

T2.lstrip() 移除字符串前面字符(默認(rèn)空格),返回字符串

T2.rstrip() 移除字符串后面字符(默認(rèn)空格),返回字符串

T2.strip() 移除字符串前后面空格,返回字符串 默認(rèn)空格,可以其他字符 S.strip('"')

2、切割

partition(sep),

rpartition(sep),

splitlines([keepends]),#把S按照行分割符分為一個(gè)list,keepends是一個(gè)bool值,如果為真每行后而會(huì)保留行分割符

split([sep [,maxsplit]]),#以sep為分隔符,把S分成一個(gè)list。maxsplit表示分割的次數(shù)。默認(rèn)的分割符為空白字符

rsplit([sep[,maxsplit]]) #從右到左切割

備注:

partition()函數(shù)族是2.5版本新增的方法。它接受一個(gè)字符串參數(shù),并返回一個(gè)3個(gè)元素的 tuple 對(duì)象。

如果sep沒出現(xiàn)在母串中,返回值是 (sep, ‘’, ‘’);

否則,返回值的第一個(gè)元素是 sep 左端的部分,第二個(gè)元素是 sep 自身,第三個(gè)元素是 sep 右端的部分。

S.partition(';')

('', ';', ' generated by /sbin/dhclient-script\nnameserver 172.16.10.171\nnameserver 8.8.8.8\nnameserver 172.16.0.2\nnameserver 178.79.131.110\nnameserver 202.96.199.133\n')

參數(shù) maxsplit 是分切的次數(shù),即最大的分切次數(shù),所以返回值最多有 maxsplit+1 個(gè)元素。

s.split() 和 s.split(‘ ‘)的返回值不盡相同

' hello world!'.split()

['hello', 'world!']

' hello world!'.split(' ')

['', '', 'hello', '', '', 'world!']

S.split('\n',3)

['; generated by /sbin/dhclient-script', 'nameserver 172.16.10.171', 'nameserver 8.8.8.8', 'nameserver 172.16.0.2\nnameserver 178.79.131.110\nnameserver 202.96.199.133\n']

超過最大切割個(gè)數(shù)后面的全部為一個(gè)元素

按行切割

S

'; generated by /sbin/dhclient-script\nnameserver 172.16.10.171\nnameserver 8.8.8.8\nnameserver 172.16.0.2\nnameserver 178.79.131.110\nnameserver 202.96.199.133\n'

S.splitlines()

['; generated by /sbin/dhclient-script', 'nameserver 172.16.10.171', 'nameserver 8.8.8.8', 'nameserver 172.16.0.2', 'nameserver 178.79.131.110', 'nameserver 202.96.199.133']

產(chǎn)生差異的原因在于當(dāng)忽略 sep 參數(shù)或sep參數(shù)為 None 時(shí)與明確給 sep 賦予字符串值時(shí) split() 采用兩種不同的算法。

對(duì)于前者,split() 先去除字符串兩端的空白符,然后以任意長(zhǎng)度的空白符串作為界定符分切字符串

即連續(xù)的空白符串被當(dāng)作單一的空白符看待;

對(duì)于后者則認(rèn)為兩個(gè)連續(xù)的 sep 之間存在一個(gè)空字符串。因此對(duì)于空字符串(或空白符串),它們的返回值也是不同的:

''.split()

[]

''.split(' ')

['']

3、變形

lower(),#全部小寫

upper(),#全部小寫

capitalize(),#首字母大寫

swapcase(),#大小寫交換

title()#每個(gè)單詞第一個(gè)大寫,其他小寫

備注

因?yàn)閠itle() 函數(shù)并不去除字符串兩端的空白符也不會(huì)把連續(xù)的空白符替換為一個(gè)空格,

所以建議使用string 模塊中的capwords(s)函數(shù),它能夠去除兩端的空白符,再將連續(xù)的空白符用一個(gè)空格代替。

Python Code

1

2

3

4

' hello world!'.title()

' Hello World!'

string.capwords(' hello world!')

'Hello World!'

4、連接

join(seq)

join() 函數(shù)的高效率(相對(duì)于循環(huán)相加而言),使它成為最值得關(guān)注的字符串方法之一。

它的功用是將可迭代的字符串序列連接成一條長(zhǎng)字符串,如:

conf = {'host':'127.0.0.1',

... 'db':'spam',

... 'user':'sa',

... 'passwd':'eggs'}

';'.join("%s=%s"%(k, v) for k, v in conf.iteritems())

'passswd=eggs;db=spam;user=sa;host=127.0.0.1'

S=''.join(T) #使用空字符串分割把字符列表轉(zhuǎn)換為字符串

5、查找

count( sub[, start[, end]]),#計(jì)算substr在S中出現(xiàn)的次數(shù)

find( sub[, start[, end]]),#返回S中出現(xiàn)sub的第一個(gè)字母的標(biāo)號(hào),如果S中沒有sub則返回-1。start和end作用就相當(dāng)于在S[start:end]中搜索

index( substr[, start[, end]]),#與find()相同,只是在S中沒有substr時(shí),會(huì)返回一個(gè)運(yùn)行時(shí)錯(cuò)誤

rfind( sub[, start[,end]]),#返回S中最后出現(xiàn)的substr的第一個(gè)字母的標(biāo)號(hào),如果S中沒有substr則返回-1,也就是說(shuō)從右邊算起的第一次出現(xiàn)的substr的首字母標(biāo)號(hào)

rindex( sub[, start[, end]])

T2.find('ie') 字符串方法調(diào)用:搜索

find()----找到的第一個(gè)符合字符的index

rfind()-----找到最后一個(gè)符合的字符的index

備注:

find()函數(shù)族找不到時(shí)返回-1,index()函數(shù)族則拋出ValueError異常。

另,也可以用 in 和 not in 操作符來(lái)判斷字符串中是否存在某個(gè)模板

6、替換

replace(old, new[,count]),#把S中的oldstar替換為newstr,count為替換次數(shù)。這是替換的通用形式,還有一些函數(shù)進(jìn)行特殊字符的替換

translate(table[,deletechars]) #使用上面的函數(shù)產(chǎn)后的翻譯表,把S進(jìn)行翻譯,并把deletechars中有的字符刪掉

備注:

replace()函數(shù)的 count 參數(shù)用以指定最大替換次數(shù)

translate() 的參數(shù) table 可以由 string.maketrans(frm, to) 生成

translate() 對(duì) unicode 對(duì)象的支持并不完備,建議不要使用

7、判定

isalnum(),#是否全是字母和數(shù)字,并至少有一個(gè)字符

isalpha(),是否全是字母,并至少有一個(gè)字符

isdigit(),是否全是數(shù)字,并至少有一個(gè)字符 ,如果是全數(shù)字返回True,否則返回False

islower(),#S中的字母是否全是小寫

isupper(),#S中的字母是否是大寫

isspace(),#是否全是空白字符,并至少有一個(gè)字符

istitle(),S是否是首字母大寫的

startswith(prefix[, start[, end]]), #是否以prefix開頭

endswith(suffix[,start[, end]]),#以suffix結(jié)尾

備注:

這些函數(shù)都比較簡(jiǎn)單,顧名知義。需要注意的是*with()函數(shù)族可以接受可選的 start, end 參數(shù),善加利用,可以優(yōu)化性能。

另,自 Py2.5 版本起,*with() 函數(shù)族的 prefix 參數(shù)可以接受 tuple 類型的實(shí)參,當(dāng)實(shí)參中的某人元素能夠匹配,即返回 True。

8、填充

字符串在輸出時(shí)的對(duì)齊:

center(width[, fillchar]), 字符串中間對(duì)齊

ljust(width[, fillchar]), 字符串左對(duì)齊,不足部分用fillchar填充,默認(rèn)的為空格

rjust(width[, fillchar]), 字符串右對(duì)齊,不足部分用fillchar填充,默認(rèn)的為空格

zfill(width), 把字符串變成width長(zhǎng),并在右對(duì)齊,不足部分用0補(bǔ)足

expandtabs([tabsize])把字符串中的制表符(tab)轉(zhuǎn)換為適當(dāng)數(shù)量的空格。

fillchar 參數(shù)指定了用以填充的字符,默認(rèn)為空格

zfill的z為zero的縮寫,顧名思義,是以字符0進(jìn)行填充,用于數(shù)值輸出

expandtabs()的tabsize 參數(shù)默認(rèn)為8。它的功能是把字符串中的制表符(tab)轉(zhuǎn)換為適當(dāng)數(shù)量的空格。

9、編碼

encode([encoding[,errors]]),

decode([encoding[,errors]])

這是一對(duì)互逆操作的方法,用以編碼和解碼字符串。因?yàn)閟tr是平臺(tái)相關(guān)的,它使用的內(nèi)碼依賴于操作系統(tǒng)環(huán)境,

而unicode是平臺(tái)無(wú)關(guān)的,是Python內(nèi)部的字符串存儲(chǔ)

python 函數(shù)是不是描述符

在Python中,訪問一個(gè)屬性的優(yōu)先級(jí)順序按照如下順序:

1.類屬性

2.數(shù)據(jù)描述符

3.實(shí)例屬性

4.非數(shù)據(jù)描述符

5.__getattr__()方法。這個(gè)方法的完整定義如下所示:

[python] view plain copy

def __getattr__(self,attr) :#attr是self的一個(gè)屬性名

pass;

先來(lái)闡述下什么叫數(shù)據(jù)描述符。

數(shù)據(jù)描述符是指實(shí)現(xiàn)了__get__,__set__,__del__方法的類屬性(由于Python中,一切皆是對(duì)象,所以你不妨把所有的屬性也看成是對(duì)象)

PS:個(gè)人覺得這里最好把數(shù)據(jù)描述符等效于定義了__get__,__set__,__del__三個(gè)方法的接口。

闡述下這三個(gè)方法:

__get__的標(biāo)準(zhǔn)定義是__get__(self,obj,type=None),它非常接近于JavaBean的get

第一個(gè)函數(shù)是調(diào)用它的實(shí)例,obj是指去訪問屬性所在的方法,最后一個(gè)type是一個(gè)可選參數(shù),通常為None(這個(gè)有待于進(jìn)一步的研究)

例如給定類X和實(shí)例x,調(diào)用x.foo,等效于調(diào)用:

type(x).__dict__["foo"].__get__(x,type(x))

調(diào)用X.foo,等效于調(diào)用:

type(x).__dict__["foo"].__get__(None,type(x))

第二個(gè)函數(shù)__set__的標(biāo)準(zhǔn)定義是__set__(self,obj,val),它非常接近于JavaBean的set方法,其中最后一個(gè)參數(shù)是要賦予的值

第三個(gè)函數(shù)__del__的標(biāo)準(zhǔn)定義是__del__(self,obj),它非常接近Java中Object的Finailize()方法,指

Python在回收這個(gè)垃圾對(duì)象時(shí)所調(diào)用到的析構(gòu)函數(shù),只是這個(gè)函數(shù)永遠(yuǎn)不會(huì)拋出異常。因?yàn)檫@個(gè)對(duì)象已經(jīng)沒有引用指向它,拋出異常沒有任何意義。

接下來(lái),我們來(lái)一一比較這些優(yōu)先級(jí).

首先來(lái)看類屬性

[python] view plain copy

# -*- coding:utf-8 -*-

'''''

Created on 2013-3-29

@author: naughty

'''

class A(object):

foo=3

print A.foo

a=A()

print a.foo

a.foo=4

print a.foo

print A.foo

上面這段代碼的輸出如下:

3

3

4

3

從輸出可以看到,當(dāng)我們給a.foo賦值的時(shí)候,其實(shí)與類實(shí)例的那個(gè)foo是沒有關(guān)系的。a.foo=4 這句話給a對(duì)象增加了一個(gè)屬性叫foo。其值是4。

最后兩個(gè)語(yǔ)句明確的表明了,我們輸出a.foo和A.foo的值,他們是不同的。

但是為什么a=A()語(yǔ)句后面的print

a.foo輸出了3呢?這是因?yàn)楦鶕?jù)搜索順序找到了類屬性。當(dāng)我們執(zhí)行a.foo=4的時(shí)候,我們讓a對(duì)象的foo屬性指向了4這個(gè)對(duì)象。但是并沒有改變

類屬性foo的值。所以最后我們print A.foo的時(shí)候,又輸出了3。

[python] view plain copy

# -*- coding:utf-8 -*-

'''''

Created on 2013-3-29

@author: naughty

'''

class A(object):

foo=3

a=A()

a.foo=4

print a.foo

del a.foo

print a.foo

上面的代碼,我給a.foo賦值為4,在輸出一次之后就del了。兩次輸出,第一次輸出的是a對(duì)象的屬性。第二次是類屬性。不是說(shuō)類屬性的優(yōu)先級(jí)比

實(shí)例屬性的高嗎。為啥第一次輸出的是4而不是3呢?還是上面解釋的原因。因?yàn)閍.foo與類屬性的foo只是重名而已。我們print

a.foo的時(shí)候,a的foo指向的是4,所以輸出了4。

------------------------------------

然后我們來(lái)看下數(shù)據(jù)描述符這一全新的語(yǔ)言概念。按照之前的定義,一個(gè)實(shí)現(xiàn)了__get__,__set__,__del__的類都統(tǒng)稱為數(shù)據(jù)描述符。我們來(lái)看下一個(gè)簡(jiǎn)單的例子。

[python] view plain copy

# -*- coding:utf-8 -*-

'''''

Created on 2013-3-29

@author: naughty

'''

class simpleDescriptor(object):

def __get__(self,obj,type=None):

pass

def __set__(self,obj,val):

pass

def __del__(self,obj):

pass

class A(object):

foo=simpleDescriptor()

print str(A.__dict__)

print A.foo

a=A()

print a.foo

a.foo=13

print a.foo

上面例子的輸出結(jié)果如下:

[plain] view plain copy

{'__dict__': attribute '__dict__' of 'A' objects, '__module__': '__main__', 'foo': __main__.simpleDescriptor object at 0x005511B0, '__weakref__': attribute '__weakref__' of 'A' objects, '__doc__': None}

None

None

None

從輸出結(jié)果看出,print語(yǔ)句打印出來(lái)的都是None。這說(shuō)明a.foo都沒有被賦值內(nèi)容。這是因?yàn)開_get__函數(shù)的函數(shù)體什么工作都沒有做。直接是pass。此時(shí),想要訪問foo,每次都沒有返回內(nèi)容,所以輸出的內(nèi)容就是None了。

[python] view plain copy

# -*- coding:utf-8 -*-

'''''

Created on 2013-3-29

@author: naughty

'''

class simpleDescriptor(object):

def __get__(self,obj,type=None):

return "hi there"

def __set__(self,obj,val):

pass

def __del__(self,obj):

pass

class A(object):

foo=simpleDescriptor()

print str(A.__dict__)

print A.foo

a=A()

print a.foo

a.foo=13

print a.foo

把__get__函數(shù)實(shí)現(xiàn)以下,就可以得到如下輸出結(jié)果:

[plain] view plain copy

{'__dict__': attribute '__dict__' of 'A' objects, '__module__': '__main__', 'foo': __main__.simpleDescriptor object at 0x00671190, '__weakref__': attribute '__weakref__' of 'A' objects, '__doc__': None}

hi there

hi there

hi there

為了加深對(duì)數(shù)據(jù)描述符的理解,看如下例子:

[python] view plain copy

# -*- coding:utf-8 -*-

'''''

Created on 2013-3-29

@author: naughty

'''

class simpleDescriptor(object):

def __init__(self):

self.result = None;

def __get__(self, obj, type=None) :

return self.result - 10;

def __set__(self, obj, val):

self.result = val + 3;

print self.result;

def __del__(self, obj):

pass

class A(object):

foo = simpleDescriptor();

a = A();

a.foo = 13;

print a.foo;

上面代碼的輸出是

16

6

第一個(gè)16為我們?cè)趯?duì)a.foo賦值的時(shí)候,人為的將13加上3后作為foo的值,第二個(gè)6是我們?cè)诜祷豠.foo之前人為的將它減去了10。

所以我們可以猜測(cè),常規(guī)的Python類在定義get,set方法的時(shí)候,如果無(wú)特殊需求,直接給對(duì)應(yīng)的屬性賦值或直接返回該屬性值。如果自己定義類,并且繼承object類的話,這幾個(gè)方法都不用定義。

-----------------

在這里看一個(gè)題外話。

看代碼

[python] view plain copy

# -*- coding:utf-8 -*-

'''''

Created on 2013-3-29

@author: naughty

'''

class simpleDescriptor(object):

def __init__(self):

self.result = None;

def __get__(self, obj, type=None) :

return self.result - 10;

def __set__(self, obj, val):

if isinstance(val,str):

assert False,"int needed! but get str"

self.result = val + 3;

print self.result;

def __del__(self, obj):

pass

class A(object):

foo = simpleDescriptor();

a = A();

a.foo = "13";

print a.foo;

上面代碼在__set__ 函數(shù)中檢查了參數(shù)val,如果val是str類型的,那么要報(bào)錯(cuò)。這就實(shí)現(xiàn)了我們上一篇文章中要實(shí)現(xiàn)的,在給屬性賦值的時(shí)候做類型檢查的功能。

-----------------------------------------------

下面我們來(lái)看下實(shí)例屬性和非數(shù)據(jù)描述符。

[python] view plain copy

# -*- coding:utf-8 -*-

'''''

Created on 2013-3-29

@author: naughty

'''

class B(object):

foo = 1.3

b = B()

print b.__dict__

b.bar = 13

print b.__dict__

print b.bar

上面代碼輸出結(jié)果如下:

{}

{'bar': 13}

13

那么什么是非數(shù)據(jù)描述符呢?

簡(jiǎn)單的說(shuō),就是沒有實(shí)現(xiàn)get,set,del三個(gè)方法的所有類。

讓我們?nèi)我饪匆粋€(gè)函數(shù)的描述:

def call():

pass

執(zhí)行print dir(call)會(huì)得到如下結(jié)果:

[plain] view plain copy

['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']

先看下dir的幫助。

dir列出給定對(duì)象的屬性或者是從這個(gè)對(duì)象能夠達(dá)到的對(duì)象。

回到print dir(call)方法的輸出,看到,call方法,有輸出的那么多個(gè)屬性。其中就包含了__get__函數(shù)。但是卻沒有__set__和__del__函數(shù)。所以所有的類成員函數(shù)都是非數(shù)據(jù)描述符。

看一個(gè)實(shí)例數(shù)據(jù)掩蓋非數(shù)據(jù)描述符的例子:

[python] view plain copy

'''''

Created on 2013-3-29

@author: naughty

'''

class simpleDescriptor(object):

def __get__(self,obj,type=None) :

return "get",self,obj,type

class D(object):

foo=simpleDescriptor()

d=D()

print d.foo

d.foo=15

print d.foo

看輸出:

('get', __main__.simpleDescriptor object at 0x02141190,

__main__.D object at 0x025CAF50, class '__main__.D')

15

可見,實(shí)例數(shù)據(jù)掩蓋了非數(shù)據(jù)描述符。

如果改成數(shù)據(jù)描述符,那么就不會(huì)被覆蓋了??聪旅妫?/p>

[python] view plain copy

'''''

Created on 2013-3-29

@author: naughty

'''

class simpleDescriptor(object):

def __get__(self,obj,type=None) :

return "get",self,obj,type

def __set__(self,obj,type=None) :

pass

def __del__(self,obj,type=None) :

pass

class D(object):

foo=simpleDescriptor()

d=D()

print d.foo

d.foo=15

print d.foo

代碼的輸出如下:

[plain] view plain copy

('get', __main__.simpleDescriptor object at 0x01DD1190, __main__.D object at 0x0257AF50, class '__main__.D')

('get', __main__.simpleDescriptor object at 0x01DD1190, __main__.D object at 0x0257AF50, class '__main__.D')

由于是數(shù)據(jù)描述符,__set __函數(shù)體是pass,所以兩次輸出都是同樣的內(nèi)容。

最后看下__getatrr__方法。它的標(biāo)準(zhǔn)定義是:__getattr__(self,attr),其中attr是屬性名

如何利用python進(jìn)行數(shù)據(jù)的相關(guān)性分析

1. 運(yùn)算優(yōu)先級(jí)

括號(hào)、指數(shù)、乘、除、加、減

2

如果你使用了非 ASCII 字符而且碰到了編碼錯(cuò)誤,記得在最頂端加一行 # -- coding: utf-8 --

3. Python格式化字符

使用更多的格式化字符。例如 %r 就是是非常有用的一個(gè),它的含義是“不管什么都打印出來(lái)”。

%s -- string

%% 百分號(hào)標(biāo)記 #就是輸出一個(gè)%

%c 字符及其ASCII碼

%s 字符串

%d 有符號(hào)整數(shù)(十進(jìn)制)

%u 無(wú)符號(hào)整數(shù)(十進(jìn)制)

%o 無(wú)符號(hào)整數(shù)(八進(jìn)制)

%x 無(wú)符號(hào)整數(shù)(十六進(jìn)制)

%X 無(wú)符號(hào)整數(shù)(十六進(jìn)制大寫字符)

%e 浮點(diǎn)數(shù)字(科學(xué)計(jì)數(shù)法)

%E 浮點(diǎn)數(shù)字(科學(xué)計(jì)數(shù)法,用E代替e)

%f 浮點(diǎn)數(shù)字(用小數(shù)點(diǎn)符號(hào))

%g 浮點(diǎn)數(shù)字(根據(jù)值的大小采用%e或%f)

%G 浮點(diǎn)數(shù)字(類似于%g)

%p 指針(用十六進(jìn)制打印值的內(nèi)存地址)

%n 存儲(chǔ)輸出字符的數(shù)量放進(jìn)參數(shù)列表的下一個(gè)變量中

%c 轉(zhuǎn)換成字符(ASCII 碼值,或者長(zhǎng)度為一的字符串)

%r 優(yōu)先用repr()函數(shù)進(jìn)行字符串轉(zhuǎn)換(Python2.0新增)

%s 優(yōu)先用str()函數(shù)進(jìn)行字符串轉(zhuǎn)換

%d / %i 轉(zhuǎn)成有符號(hào)十進(jìn)制數(shù)

%u 轉(zhuǎn)成無(wú)符號(hào)十進(jìn)制數(shù)

%o 轉(zhuǎn)成無(wú)符號(hào)八進(jìn)制數(shù)

%x / %X (Unsigned)轉(zhuǎn)成無(wú)符號(hào)十六進(jìn)制數(shù)(x / X 代表轉(zhuǎn)換后的十六進(jìn)制字符的大小寫)

%e / %E 轉(zhuǎn)成科學(xué)計(jì)數(shù)法(e / E控制輸出e / E)

%f / %F 轉(zhuǎn)成浮點(diǎn)數(shù)(小數(shù)部分自然截?cái)啵?/p>

%g / %G : %e和%f / %E和%F 的簡(jiǎn)寫

%% 輸出%

輔助符號(hào) 說(shuō)明

* 定義寬度或者小數(shù)點(diǎn)精度

- 用做左對(duì)齊

+ 在正數(shù)前面顯示加號(hào)(+)

sp 在正數(shù)前面顯示空格

# 在八進(jìn)制數(shù)前面顯示零(0),在十六進(jìn)制前面顯示“0x”或者“0X”(取決于用的是“x”還是“X”)

0 顯示的數(shù)字前面填充“0”而不是默認(rèn)的空格

m.n m 是顯示的最小總寬度,n 是小數(shù)點(diǎn)后的位數(shù)(如果可用的話)

python 高階函數(shù)什么意思

變量可以指向函數(shù),函數(shù)的參數(shù)可以接收變量,那么函數(shù)可以接收另一個(gè)函數(shù)作為參數(shù),這種函數(shù)稱為高階函數(shù)。

1、把函數(shù)作為實(shí)參;2、把函數(shù)作為返回值。

python高階函數(shù)有哪些?

map函數(shù)

map()是python內(nèi)置的高階函數(shù),它接收兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是序列,map將傳入的函數(shù)依次作用到序列的每個(gè)元素,并且把結(jié)果作為新的列表返回。

filter函數(shù)

filter()同樣也是接收一個(gè)函數(shù)和一個(gè)序列,和map()不同的是,filter函數(shù)把傳入的函數(shù)依次作用于每個(gè)元素,然后返回返回值是True的元素。

reduce函數(shù)

reduce()把一個(gè)函數(shù)作用到一個(gè)序列上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce把結(jié)果和序列的下一個(gè)元素做累積計(jì)算。

lambda函數(shù)

lambda()有時(shí)候傳參數(shù)時(shí)不需要顯示自定義的函數(shù),直接傳入匿名函數(shù)更方便;冒號(hào)前面的X,y表示函數(shù)參數(shù),匿名函數(shù)不需要擔(dān)心函數(shù)名的沖突,匿名函數(shù)也是一個(gè)函數(shù)對(duì)象,可以吧匿名函數(shù)賦值給一個(gè)變量,再利用變量來(lái)調(diào)用函數(shù),匿名函數(shù)也可以作為返回值返回。

sorted函數(shù)

sorted()作為python內(nèi)置高階函數(shù)之一,其功能是對(duì)序列(列表、元組、字典、集合、字符串)進(jìn)行排序。


當(dāng)前文章:Python函數(shù)優(yōu)先等級(jí) python 優(yōu)先級(jí)
鏈接分享:http://weahome.cn/article/doojgsc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部