新聞中心
python 8個(gè)常用內(nèi)置函數(shù)解說
8個(gè)超好用內(nèi)置函數(shù)set(),eval(),sorted(),reversed(),map(),reduce(),filter(),enumerate()
創(chuàng)新互聯(lián)是一家專業(yè)提供港口企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、html5、小程序制作等業(yè)務(wù)。10年已為港口眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
python中有許多內(nèi)置函數(shù),不像print那么廣為人知,但它們卻異常的強(qiáng)大,用好了可以大大提高代碼效率。
這次來梳理下8個(gè)好用的python內(nèi)置函數(shù)
1、set()
當(dāng)需要對(duì)一個(gè)列表進(jìn)行去重操作的時(shí)候,set()函數(shù)就派上用場(chǎng)了。
用于創(chuàng)建一個(gè)集合,集合里的元素是無序且不重復(fù)的。集合對(duì)象創(chuàng)建后,還能使用并集、交集、差集功能。
2、eval()之前有人問如何用python寫一個(gè)四則運(yùn)算器,輸入字符串公式,直接產(chǎn)生結(jié)果。用eval()來做就很簡(jiǎn)單:eval(str_expression)作用是將字符串轉(zhuǎn)換成表達(dá)式,并且執(zhí)行。
3、sorted()在處理數(shù)據(jù)過程中,我們經(jīng)常會(huì)用到排序操作,比如將列表、字典、元組里面的元素正/倒排序。這時(shí)候就需要用到sorted() ,它可以對(duì)任何可迭代對(duì)象進(jìn)行排序,并返回列表。對(duì)列表升序操作:
對(duì)元組倒序操作:
使用參數(shù):key,根據(jù)自定義規(guī)則,按字符串長(zhǎng)度來排序:
根據(jù)自定義規(guī)則,對(duì)元組構(gòu)成的列表進(jìn)行排序:
4、reversed()如果需要對(duì)序列的元素進(jìn)行反轉(zhuǎn)操作,reversed()函數(shù)能幫到你。reversed()接受一個(gè)序列,將序列里的元素反轉(zhuǎn),并最終返回迭代器。
5、map()做文本處理的時(shí)候,假如要對(duì)序列里的每個(gè)單詞進(jìn)行大寫轉(zhuǎn)化操作。這個(gè)時(shí)候就可以使用map()函數(shù)。
map()會(huì)根據(jù)提供的函數(shù),對(duì)指定的序列做映射,最終返回迭代器。也就是說map()函數(shù)會(huì)把序列里的每一個(gè)元素用指定的方法加工一遍,最終返回給你加工好的序列。舉個(gè)例子,對(duì)列表里的每個(gè)數(shù)字作平方處理:
6、reduce()前面說到對(duì)列表里的每個(gè)數(shù)字作平方處理,用map()函數(shù)。那我想將列表里的每個(gè)元素相乘,該怎么做呢?這時(shí)候用到reduce()函數(shù)。
reduce()會(huì)對(duì)參數(shù)序列中元素進(jìn)行累積。第一、第二個(gè)元素先進(jìn)行函數(shù)操作,生成的結(jié)果再和第三個(gè)元素進(jìn)行函數(shù)操作,以此類推,最終生成所有元素累積運(yùn)算的結(jié)果。再舉個(gè)例子,將字母連接成字符串。
你可能已經(jīng)注意到,reduce()函數(shù)在python3里已經(jīng)不再是內(nèi)置函數(shù),而是遷移到了functools模塊中。這里把reduce()函數(shù)拎出來講,是因?yàn)樗匾恕?/p>
7、filter()一些數(shù)字組成的列表,要把其中偶數(shù)去掉,該怎么做呢?
filter()函數(shù)輕松完成了任務(wù),它用于過濾序列,過濾掉不符合條件的元素,返回一個(gè)迭代器對(duì)象。filter()函數(shù)和map()、reduce()函數(shù)類似,都是將序列里的每個(gè)元素映射到函數(shù),最終返回結(jié)果。我們?cè)僭囋嚕绾螐脑S多單詞里挑出包含字母w的單詞。
8、enumerate()這樣一個(gè)場(chǎng)景,同時(shí)打印出序列里每一個(gè)元素和它對(duì)應(yīng)的順序號(hào),我們用enumerate()函數(shù)做做看。
enumerate翻譯過來是枚舉、列舉的意思,所以說enumerate()函數(shù)用于對(duì)序列里的元素進(jìn)行順序標(biāo)注,返回(元素、索引)組成的迭代器。再舉個(gè)例子說明,對(duì)字符串進(jìn)行標(biāo)注,返回每個(gè)字母和其索引。
python、什么是內(nèi)建函數(shù)
python內(nèi)建函數(shù)總結(jié)
1. abs(x)
abs()函數(shù)返回?cái)?shù)字(可為普通型、長(zhǎng)整型或浮點(diǎn)型)的絕對(duì)值。如果給出復(fù)數(shù),返回值就是該復(fù)數(shù)的模。例如:
print abs(-2,4)
2.4
print abs(4+2j)
4.472135955
2. apply(function,args[,keywords])
apply()函數(shù)將args參數(shù)應(yīng)用到function上。function參數(shù)必須是可調(diào)用對(duì)象(函數(shù)、方法或其他可調(diào)用對(duì)象)。args參數(shù)必須以
序列形式給出。列表在應(yīng)用之前被轉(zhuǎn)換為元組。function對(duì)象在被調(diào)用時(shí),將args列表的內(nèi)容分別作為獨(dú)立的參數(shù)看待。例如:
apply(add,(1,3,4))
等價(jià)于
add(1,3,4)
在以列表或元組定義了一列參數(shù),且需要將此列表參數(shù)分別作為個(gè)個(gè)獨(dú)立參數(shù)使用的情況下,必須使用apply()函數(shù)。在要把變長(zhǎng)參數(shù)列應(yīng)用到已函數(shù)上時(shí),apply()函數(shù)非常有用。
可選項(xiàng)keywords參數(shù)應(yīng)是個(gè)字典,字典的關(guān)鍵字是字符串。這些字符串在apply()函數(shù)的參數(shù)列末尾處給出,它們將被用作關(guān)鍵字參數(shù)。
3. buffer(object[,offset[,size]])
如果object對(duì)象支持緩存調(diào)用接口buffer()函數(shù)就為object對(duì)象創(chuàng)建一個(gè)新緩存。這樣的對(duì)象包括字符串、數(shù)組和緩存。該新緩存通過使用從
offset參數(shù)值開始知道該對(duì)象末尾的存儲(chǔ)片段或從offset參數(shù)值開始直到size參數(shù)給出的尺寸為長(zhǎng)度的存儲(chǔ)片段來引用object對(duì)象。如果沒
給出任何選項(xiàng)參數(shù),緩存區(qū)域就覆蓋整個(gè)序列,最終得到的緩存對(duì)象是object對(duì)象數(shù)據(jù)的只讀拷貝。
緩存對(duì)象用于給某個(gè)對(duì)象類型創(chuàng)建一個(gè)更友好的接口。比如,字符串對(duì)象類型通用緩存對(duì)象而變得可用,允許逐個(gè)字節(jié)地訪問字符串中的信息。
4. callable(object)
callable()函數(shù)在object對(duì)象是可調(diào)用對(duì)象的情況下,返回真(true);否則假(false),可調(diào)用對(duì)象包括函數(shù)、方法、代碼對(duì)象、類(在調(diào)用時(shí)返回新的實(shí)例)和已經(jīng)定義‘調(diào)用’方法的類實(shí)例
5. chr(i)
chr()函數(shù)返回與ASCII碼i相匹配的一個(gè)單一字符串,如下例所示:
print chr(72)+chr(101)+chr(108)+chr(111)
hello
chr()函數(shù)是ord()函數(shù)的反函數(shù),其中ord()函數(shù)將字符串轉(zhuǎn)換回ASCII整數(shù)碼,參數(shù)i的取值應(yīng)在0~255范圍內(nèi)。如果參數(shù)i的取值在此范圍之外,將引發(fā)ValueError異常。
6. cmp(x,y)
cmp()函數(shù)比較x和y這兩個(gè)對(duì)象,且根據(jù)比較結(jié)果返回一個(gè)整數(shù)。如果xy,則返回正數(shù)。請(qǐng)注意,此函數(shù)特別用來比較數(shù)值大小,而不是任何引用關(guān)系,因而有下面的結(jié)果:
a=99
b=int('99')
cmp(a,b)
7. coerce(x,y)
coerce()函數(shù)返回一個(gè)元組,該元組由兩個(gè)數(shù)值型參數(shù)組成。此函數(shù)將兩個(gè)數(shù)值型參數(shù)轉(zhuǎn)換為同一類型數(shù)字,其轉(zhuǎn)換規(guī)則與算術(shù)轉(zhuǎn)換規(guī)則一樣。一下是兩個(gè)例子:
a=1
b=1.2
coerce(a,b)
(1.0,1.2)
a=1+2j
b=4.3e10
coerce(a,b)
((1+2j),(43000000000+0j))
8 compile(string,filename,kind)
compile()函數(shù)將string編譯為代碼對(duì)象,編譯生成的代碼對(duì)象接下來被exec語句執(zhí)行,接著能利用eval()函數(shù)對(duì)其進(jìn)行求值。
filename參數(shù)應(yīng)是代碼從其中讀出的文件名。如果內(nèi)部生成文件名,filename參數(shù)值應(yīng)是相應(yīng)的標(biāo)識(shí)符。kind參數(shù)指定string參數(shù)中所含代碼的類別。
舉例如下:
a=compile(‘print “Hello World”’,’’,’single’)
exec(a)
Hello World
eval(a)
Hello World
9. complex(real,[image])
Complex()函數(shù)返回一個(gè)復(fù)數(shù),其實(shí)部為real參數(shù)值。如果給出image參數(shù)的值,則虛部就為image;如果默認(rèn)image參數(shù),則虛部為0j。
10. delattr(object,name)
delattr()函數(shù)在object對(duì)象許可時(shí),刪除object對(duì)象的name屬性,此函數(shù)等價(jià)于如下語句:
del object.attr
而delattr()函數(shù)允許利用編程方法定義來定義object和name參數(shù),并不是在代碼中顯示指定。
python有多少內(nèi)置函數(shù)
Python內(nèi)置函數(shù)有很多,為大家推薦5個(gè)神仙級(jí)的內(nèi)置函數(shù):
(1)Lambda函數(shù)
用于創(chuàng)建匿名函數(shù),即沒有名稱的函數(shù)。它只是一個(gè)表達(dá)式,函數(shù)體比def簡(jiǎn)單很多。當(dāng)我們需要?jiǎng)?chuàng)建一個(gè)函數(shù)來執(zhí)行單個(gè)操作并且可以在一行中編寫時(shí),就可以用到匿名函數(shù)了。
Lamdba的主體是一個(gè)表達(dá)式,而不是一個(gè)代碼塊。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去。
利用Lamdba函數(shù),往往可以將代碼簡(jiǎn)化許多。
(2)Map函數(shù)
會(huì)將一個(gè)函數(shù)映射到一個(gè)輸入列表的所有元素上,比如我們先創(chuàng)建了一個(gè)函數(shù)來返回一個(gè)大寫的輸入單詞,然后將此函數(shù)應(yīng)有到列表colors中的所有元素。
我們還可以使用匿名函數(shù)lamdba來配合map函數(shù),這樣可以更加精簡(jiǎn)。
(3)Reduce函數(shù)
當(dāng)需要對(duì)一個(gè)列表進(jìn)行一些計(jì)算并返回結(jié)果時(shí),reduce()是個(gè)非常有用的函數(shù)。舉個(gè)例子,當(dāng)需要計(jì)算一個(gè)整數(shù)列表所有元素的乘積時(shí),即可使用reduce函數(shù)實(shí)現(xiàn)。
它與函數(shù)的最大的區(qū)別就是,reduce()里的映射函數(shù)(function)接收兩個(gè)參數(shù),而map接收一個(gè)參數(shù)。
(4)enumerate函數(shù)
用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象(如列表、元組或字符串)組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),一般用在for循環(huán)當(dāng)中。
它的兩個(gè)參數(shù),一個(gè)是序列、迭代器或其他支持迭代對(duì)象;另一個(gè)是下標(biāo)起始位置,默認(rèn)情況從0開始,也可以自定義計(jì)數(shù)器的起始編號(hào)。
(5)Zip函數(shù)
用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的列表
當(dāng)我們使用zip()函數(shù)時(shí),如果各個(gè)迭代器的元素個(gè)數(shù)不一致,則返回列表長(zhǎng)度與最短的對(duì)象相同。
python所有內(nèi)置函數(shù)的定義詳解
1、定義函數(shù)
函數(shù)是可重用的程序。本書中已經(jīng)使用了許多內(nèi)建函數(shù),如len()函數(shù)和range()函數(shù),但是還沒自定義過函數(shù)。定義函數(shù)的語法格式如下:
def 函數(shù)名(參數(shù)):
函數(shù)體
定義函數(shù)的規(guī)則如下:
①關(guān)鍵字def用來定義一個(gè)函數(shù),它是define的縮寫。
②函數(shù)名是函數(shù)的唯一標(biāo)識(shí),函數(shù)名的命名規(guī)則遵循標(biāo)識(shí)符的命名規(guī)則。
③函數(shù)名后面一定要緊跟著一個(gè)括號(hào),括號(hào)內(nèi)的參數(shù)是可選的,括號(hào)后面要有冒號(hào)。
④函數(shù)體(statement)為一個(gè)或一組Python語句,注意要有縮進(jìn)。
⑤函數(shù)體的第一行可以有文檔字符串,用于描述函數(shù)的功能,用三引號(hào)括起來。
按照定義規(guī)則,可以定義第一個(gè)函數(shù)了:
def?hello_world():
...?????print('Hello,world!')???#?注意函數(shù)體要有縮進(jìn)
...
hello_world()
Hello,world!
這個(gè)函數(shù)不帶任何參數(shù),它的功能是打印出“Hello,world!”。最后一行代碼hello_world()是調(diào)用函數(shù),即讓Python執(zhí)行函數(shù)的代碼。
2、全局變量和局部變量
全局變量是定義在所有函數(shù)外的變量。例如,定義一個(gè)全局變量a,分別在函數(shù)test1()和test2()使用變量a:
a?=?100???#?全局變量
def?test1():
...?????print(a)
...
def?test2():
...?????print(a)
...
test1()
100
test2()
100
定義了全局變量a之后,在函數(shù)test1()和test2()內(nèi)都可以使用變量a,由此可知,全局變量的作用范圍是全局。
局部變量是在函數(shù)內(nèi)定義的變量,除了用關(guān)鍵字global修飾的變量以外。例如,在函數(shù)test1()內(nèi)定義一個(gè)局部變量a,分別在函數(shù)外和另一個(gè)函數(shù)test2()內(nèi)使用變量a:
def?test1():
...?????a?=?100???#?局部變量
...?????print(a)
...
def?test2():
...?????print(a)
...
test1()
100
print(a)
Traceback?(most?recent?call?last):
File?"stdin",?line?1,?in?module
NameError:?name?'a'?is?not?defined
test2()
Traceback?(most?recent?call?last):
File?"stdin",?line?1,?in?module
File?"stdin",?line?2,?in?test2
NameError:?name?'a'?is?not?defined
Python解釋器提示出錯(cuò)了。由于局部變量a定義在函數(shù)test1()內(nèi),因此,在函數(shù)test1()內(nèi)可以使用變量a,但是在函數(shù)外或者另一個(gè)函數(shù)test2()內(nèi)使用變量a,都會(huì)報(bào)錯(cuò),由此可見,局部變量的作用范圍是定義它的函數(shù)內(nèi)部。
一般情況下,在函數(shù)內(nèi)聲明的變量都是局部變量,但是采用關(guān)鍵字global修飾的變量卻是全局變量:
def?test1():
...?????global?a???#?全局變量
...?????a?=?100
...?????print(a)
...
def?test2():
...?????print(a)
...
test1()
100
print(a)
100
test2()
100
這個(gè)程序與上個(gè)程序相比,只是在函數(shù)test1()中多了一行代碼“global a”,程序便可以正確運(yùn)行了。在函數(shù)test1()中,采用關(guān)鍵字global修飾了變量a之后,變量a就變成了全局變量,不僅可以在該函數(shù)內(nèi)使用,還可以在函數(shù)外或者其他函數(shù)內(nèi)使用。
如果在某個(gè)函數(shù)內(nèi)局部變量與全局變量同名,那么在該函數(shù)中局部變量會(huì)覆蓋全局變量:
a?=?100???#?全局變量
def?test1():
...?????a?=?200???#?同名局部變量
...?????print(a)
...
def?test2():
...?????print(a)
...
test1()
200
test2()
100
由于在函數(shù)test1()中定義了一個(gè)與全局變量同名的局部變量a,因此,在函數(shù)test1()中全局變量a的值被局部變量覆蓋了,但是在函數(shù)test2()中全局變量a的值沒有被覆蓋。
綜上所述,在Python中,全局變量保存的數(shù)據(jù)供整個(gè)腳本文件使用;而局部變量只用于臨時(shí)保存數(shù)據(jù),變量?jī)H供局部代碼塊使用。
Python 幾個(gè)重要的內(nèi)置函數(shù)
在學(xué)習(xí)Python的過程中,有幾個(gè)比較重要的內(nèi)置函數(shù):help()函數(shù)、dir()函數(shù)、input()與raw_input()函數(shù)、print()函數(shù)、type()函數(shù)。
第一、help()函數(shù)
Help()函數(shù)的參數(shù)分為兩種:如果傳一個(gè)字符串做參數(shù)的話,它會(huì)自動(dòng)搜索以這個(gè)字符串命名的模塊、方法等;如果傳入的是一個(gè)對(duì)象,就會(huì)顯示這個(gè)對(duì)象的類型的幫助。比如輸入help(‘print’),它就會(huì)尋找以‘print’為名的模塊、類等,找不到就會(huì)看到提示信息;而print在Python里是一個(gè)保留字,和pass、return同等,而非對(duì)象,所以help(print)也會(huì)報(bào)錯(cuò)。
第二、dir()函數(shù)
dir()函數(shù)返回任意對(duì)象的屬性和方法列表,包含模塊對(duì)象、函數(shù)對(duì)象、字符串對(duì)象、列表對(duì)象、字典對(duì)象等。盡管查找和導(dǎo)入模塊相對(duì)容易,但是記住每個(gè)模塊包含什么卻不是這么簡(jiǎn)單,您并不希望總是必須查看源代碼來找出答案。Python提供了一種方法,可以使用內(nèi)置的dir()函數(shù)來檢查模塊的內(nèi)容,當(dāng)你為dir()提供一個(gè)模塊名的時(shí)候,它返回模塊定義的屬性列表。dir()函數(shù)適用于所有對(duì)象的類型,包含字符串、整數(shù)、列表、元組、字典、函數(shù)、定制類、類實(shí)例和類方法。
第三、input與raw_input函數(shù)
都是用于讀取用戶輸入的,不同的是input()函數(shù)期望用戶輸入的是一個(gè)有效的表達(dá)式,而raw_input()函數(shù)是將用戶的輸入包裝成一個(gè)字符串。
第四、Print()函數(shù)
Print在Python3版本之間是作為Python語句使用的,在Python3里print是作為函數(shù)使用的。
第五、type()函數(shù)
Type()函數(shù)返回任意對(duì)象的數(shù)據(jù)類型。在types模塊中列出了可能的數(shù)據(jù)類型,這對(duì)于處理多種數(shù)據(jù)類型的函數(shù)非常有用,它通過返回類型對(duì)象來做到這一點(diǎn),可以將這個(gè)類型對(duì)象與types模塊中定義類型相比較。
本文題目:python內(nèi)斂函數(shù) 基本python內(nèi)置函數(shù)
轉(zhuǎn)載注明:http://fisionsoft.com.cn/article/docdooi.html