12.0宇整、python內(nèi)置函數(shù)和匿名函數(shù)

內(nèi)置函數(shù)和匿名函數(shù)

楔子

在講新知識(shí)之前瓶佳,我們先來(lái)復(fù)習(xí)復(fù)習(xí)函數(shù)的基礎(chǔ)知識(shí)。

問:函數(shù)怎么調(diào)用鳞青?

函數(shù)名()

如果你們這么說霸饲。。臂拓。那你們就對(duì)了厚脉!好了記住這個(gè)事兒別給忘記了,咱們繼續(xù)談下一話題埃儿。器仗。。

來(lái)你們?cè)谧约旱沫h(huán)境里打印一下自己的名字童番。

你們是怎么打的呀精钮?

是不是print('xxx'),好了剃斧,現(xiàn)在你們結(jié)合我剛剛說的函數(shù)的調(diào)用方法轨香,你有沒有什么發(fā)現(xiàn)?

我們就猜幼东,print有沒有可能是一個(gè)函數(shù)臂容?

但是沒有人實(shí)現(xiàn)它啊科雳。。脓杉。它怎么就能用了呢糟秘?

早在我們“初識(shí)函數(shù)”的時(shí)候是不是就是用len()引出的?

那現(xiàn)在我們也知道len()也是一個(gè)函數(shù)球散,也沒人實(shí)現(xiàn)尿赚,它好像就自己能用了。蕉堰。凌净。

之前老師給你講你可以這樣用你就用了,那你有沒有想過像這樣直接拿來(lái)就能用的函數(shù)到底有多少屋讶?

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

接下來(lái)冰寻,我們就一起來(lái)看看python里的內(nèi)置函數(shù)。截止到python版本3.6.2皿渗,現(xiàn)在python一共為我們提供了68個(gè)內(nèi)置函數(shù)斩芭。它們就是python提供給你直接可以拿來(lái)使用的所有函數(shù)。這些函數(shù)有些我們已經(jīng)用過了羹奉,有些我們還沒用到過秒旋,還有一些是被封印了约计,必須等我們學(xué)了新知識(shí)才能解開封印的诀拭。那今天我們就一起來(lái)認(rèn)識(shí)一下python的內(nèi)置函數(shù)。這么多函數(shù)煤蚌,我們?cè)搹暮螌W(xué)起呢耕挨?

Built-in?Functions

abs()dict()help()min()setattr()

all()dir()hex()next()slice()

any()divmod()id()object()sorted()

ascii()enumerate()input()oct()staticmethod()

bin()eval()int()open()str()

bool()exec()isinstance()ord()sum()

bytearray()filter()issubclass()pow()super()

bytes()float()iter()print()tuple()

callable()format()len()property()type()

chr()frozenset()list()range()vars()

classmethod()getattr()locals()repr()zip()

compile()globals()map()reversed()__import__()

complex()hasattr()max()round()

delattr()hash()memoryview()set()

上面就是內(nèi)置函數(shù)的表,68個(gè)函數(shù)都在這兒了尉桩。這個(gè)表的順序是按照首字母的排列順序來(lái)的筒占,你會(huì)發(fā)現(xiàn)都混亂的堆在一起。比如蜘犁,oct和bin和hex都是做進(jìn)制換算的翰苫,但是卻被寫在了三個(gè)地方。这橙。奏窑。這樣非常不利于大家歸納和學(xué)習(xí)。那我把這些函數(shù)分成了6大類屈扎。你看下面這張圖埃唯,你猜咱們今天會(huì)學(xué)哪幾大類呀??

我猜你們都猜對(duì)了鹰晨。我們今天就要學(xué)習(xí)用粉紅色標(biāo)注出來(lái)的這四大塊——56個(gè)方法墨叛。還有12個(gè)方法欠著怎么辦呢止毕?我們講完面向?qū)ο筮@剩下的12個(gè)會(huì)在兩周之內(nèi)陸續(xù)還給你們的,我保證(認(rèn)真臉)漠趁。那這樣扁凛,我們今天就主要關(guān)注我們要學(xué)習(xí)的這56個(gè)方法。

那要學(xué)的一共4塊闯传,咱們從哪兒開始學(xué)起呢令漂?

作用域相關(guān)


基于字典的形式獲取局部變量和全局變量

globals()——獲取全局變量的字典

locals()——獲取執(zhí)行本方法所在命名空間內(nèi)的局部變量的字典

其他


字符串類型代碼的執(zhí)行

輸入輸出相關(guān):

input() 輸入

s = input("請(qǐng)輸入內(nèi)容 : ")? #輸入的內(nèi)容賦值給s變量print(s)? #輸入什么打印什么。數(shù)據(jù)類型是str

print() 輸出

def print(self, *args, sep=' ', end='\n', file=None): # known special case of print? ? """

? ? print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

? ? file:? 默認(rèn)是輸出到屏幕丸边,如果設(shè)置為文件句柄叠必,輸出到文件

? ? sep:? 打印多個(gè)值之間的分隔符,默認(rèn)為空格

? ? end:? 每一次打印的結(jié)尾妹窖,默認(rèn)為換行符

? ? flush: 立即把內(nèi)容輸出到流文件纬朝,不作緩存

? ? """

f = open('tmp_file','w')print(123,456,sep=',',file = f,flush=True)

import timefor i in range(0,101,2):?

? ? time.sleep(0.1)

? ? char_num = i//2? ? ? #打印多少個(gè)'*'? ? per_str = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num)

? ? print(per_str,end='', flush=True)#小越越? : \r 可以把光標(biāo)移動(dòng)到行首但不換行


數(shù)據(jù)類型相關(guān):

type(o)?

返回變量o的數(shù)據(jù)類型


內(nèi)存相關(guān):

id(o) o是參數(shù)

返回一個(gè)變量的內(nèi)存地址

hash(o) o是參數(shù)

返回一個(gè)可hash變量的哈希值,不可hash的變量被hash之后會(huì)報(bào)錯(cuò)骄呼。

t = (1,2,3)

l = [1,2,3]print(hash(t))? #可hashprint(hash(l))? #會(huì)報(bào)錯(cuò)'''

結(jié)果:

TypeError: unhashable type: 'list'

'''

hash函數(shù)會(huì)根據(jù)一個(gè)內(nèi)部的算法對(duì)當(dāng)前可hash變量進(jìn)行處理共苛,返回一個(gè)int數(shù)字。

*每一次執(zhí)行程序蜓萄,內(nèi)容相同的變量hash值在這一次執(zhí)行過程中不會(huì)發(fā)生改變隅茎。


文件操作相關(guān)

open() ?

打開一個(gè)文件,返回一個(gè)文件操作符(文件句柄)

操作文件的模式有r,w,a,r+,w+,a+ 共6種嫉沽,每一種方式都可以用二進(jìn)制的形式操作(rb,wb,ab,rb+,wb+,ab+)

可以用encoding指定編碼.


模塊操作相關(guān)

__import__

導(dǎo)入一個(gè)模塊

import time

os = __import__('os')print(os.path.abspath('.'))


幫助方法

在控制臺(tái)執(zhí)行help()進(jìn)入幫助模式辟犀。可以隨意輸入變量或者變量的類型绸硕。輸入q退出

或者直接執(zhí)行help(o)堂竟,o是參數(shù),查看和變量o有關(guān)的操作玻佩。出嘹。。


和調(diào)用相關(guān)

callable(o)

o是參數(shù)咬崔,看這個(gè)變量是不是可調(diào)用税稼。

如果o是一個(gè)函數(shù)名,就會(huì)返回True

def func():passprint(callable(func))? #參數(shù)是函數(shù)名垮斯,可調(diào)用郎仆,返回Trueprint(callable(123))? #參數(shù)是數(shù)字,不可調(diào)用甚脉,返回False


查看參數(shù)所屬類型的所有內(nèi)置方法

dir()

默認(rèn)查看全局空間內(nèi)的屬性丸升,也接受一個(gè)參數(shù),查看這個(gè)參數(shù)內(nèi)的方法或變量

print(dir(list))? #查看列表的內(nèi)置方法print(dir(int))? #查看整數(shù)的內(nèi)置方法


和數(shù)字相關(guān)



數(shù)字——數(shù)據(jù)類型相關(guān):bool牺氨,int狡耻,float墩剖,complex

數(shù)字——進(jìn)制轉(zhuǎn)換相關(guān):bin,oct夷狰,hex

數(shù)字——數(shù)學(xué)運(yùn)算:abs岭皂,divmod,min沼头,max爷绘,sum,round进倍,pow


和數(shù)據(jù)結(jié)構(gòu)相關(guān)


序列——列表和元組相關(guān)的:list和tuple

序列——字符串相關(guān)的:str土至,format,bytes猾昆,bytearry陶因,memoryview,ord垂蜗,chr楷扬,ascii,repr

ret = bytearray('alex',encoding='utf-8')print(id(ret))print(ret[0])

ret[0] = 65print(ret)print(id(ret))

ret = memoryview(bytes('你好',encoding='utf-8'))print(len(ret))print(bytes(ret[:3]).decode('utf-8'))print(bytes(ret[3:]).decode('utf-8'))


序列:reversed贴见,slice

l = (1,2,23,213,5612,342,43)print(l)print(list(reversed(l)))

l = (1,2,23,213,5612,342,43)

sli = slice(1,5,2)print(l[sli])


數(shù)據(jù)集合——字典和集合:dict烘苹,set,frozenset

數(shù)據(jù)集合:len片部,sorted镣衡,enumerate,all吞琐,any捆探,zip然爆,filter站粟,map

匿名函數(shù)-lambda

匿名函數(shù):為了解決那些功能很簡(jiǎn)單的需求而設(shè)計(jì)的一句話函數(shù)

#這段代碼def calc(n):

? ? return n**nprint(calc(10))

#換成匿名函數(shù)calc = lambda n:n**nprint(calc(10))

上面是我們對(duì)calc這個(gè)匿名函數(shù)的分析,下面給出了一個(gè)關(guān)于匿名函數(shù)格式的說明

函數(shù)名 = lambda 參數(shù) :返回值#參數(shù)可以有多個(gè)曾雕,用逗號(hào)隔開

#匿名函數(shù)不管邏輯多復(fù)雜奴烙,只能寫一行,且邏輯執(zhí)行結(jié)束后的內(nèi)容就是返回值

#返回值和正常的函數(shù)一樣可以是任意數(shù)據(jù)類型

我們可以看出剖张,匿名函數(shù)并不是真的不能有名字切诀。

匿名函數(shù)的調(diào)用和正常的調(diào)用也沒有什么分別。 就是 函數(shù)名(參數(shù)) 就可以了~~~

練一練:

請(qǐng)把以下函數(shù)變成匿名函數(shù)def add(x,y):

? ? return x+y


上面是匿名函數(shù)的函數(shù)用法搔弄。除此之外幅虑,匿名函數(shù)也不是浪得虛名,它真的可以匿名顾犹。在和其他功能函數(shù)合作的時(shí)候

l=[3,2,100,999,213,1111,31121,333]print(max(l))

dic={'k1':10,'k2':100,'k3':30}print(max(dic))print(dic[max(dic,key=lambda k:dic[k])])

res = map(lambda x:x**2,[1,5,7,4,8])for i in res:

? ? print(i)

輸出

1

25

49

16

64

res = filter(lambda x:x>10,[5,8,11,9,15])for i in res:

? ? print(i)

輸出

11

15

面試題練一練

1.下面程序的輸出結(jié)果是:

d = lambda p:p*2

t = lambda p:p*3

x = 2

x = d(x)

x = t(x)

x = d(x)print(x)

2.現(xiàn)有兩元組(('a'),('b')),(('c'),('d')),請(qǐng)使用python中匿名函數(shù)生成列表[{'a':'c'},{'b':'d'}]

#答案一test = lambda t1,t2 :[{i:j} for i,j in zip(t1,t2)]print(test(t1,t2))#答案二print(list(map(lambda t:{t[0]:t[1]},zip(t1,t2))))#還可以這樣寫print([{i:j} for i,j in zip(t1,t2)])

3.以下代碼的輸出是什么倒庵?請(qǐng)給出答案并解釋褒墨。def multipliers():

? ? return [lambda x:i*x for i in range(4)]print([m(2) for m in multipliers()])

請(qǐng)修改multipliers的定義來(lái)產(chǎn)生期望的結(jié)果。


本章小結(jié)

說學(xué)習(xí)內(nèi)置函數(shù)擎宝,不如說整理自己的知識(shí)體系郁妈。其實(shí)整理這些內(nèi)置函數(shù)的過程也是在整理自己的知識(shí)體系。

我們講課的時(shí)候會(huì)歸類:常用或者不常用绍申,主要還是根據(jù)場(chǎng)景而言噩咪。

一個(gè)優(yōu)秀的程序員就應(yīng)該是在該用這個(gè)方法的時(shí)候信手拈來(lái),把每一個(gè)內(nèi)置的函數(shù)都用的恰到好處极阅。

要想做到這一點(diǎn)胃碾,至少要先了解,才能在需要的時(shí)候想起筋搏,進(jìn)而將它用在該用的地方书在。

但是在這里,我還是以自己的一點(diǎn)經(jīng)驗(yàn)之談拆又,把幾個(gè)平時(shí)工作中相對(duì)更常用的方法推薦一下儒旬,請(qǐng)務(wù)必重點(diǎn)掌握:

其他:input,print,type,hash,open,import,dir

str類型代碼執(zhí)行:eval,exec

數(shù)字:bool,int,float,abs,divmod,min,max,sum,round,pow

序列——列表和元組相關(guān)的:list和tuple

序列——字符串相關(guān)的:str,bytes帖族,repr

序列:reversed栈源,slice

數(shù)據(jù)集合——字典和集合:dict,set竖般,frozenset

數(shù)據(jù)集合:len甚垦,sorted,enumerate涣雕,zip艰亮,filter,map

參考文檔:

  https://docs.python.org/3/library/functions.html#object

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挣郭,一起剝皮案震驚了整個(gè)濱河市迄埃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兑障,老刑警劉巖侄非,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異流译,居然都是意外死亡逞怨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門福澡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)叠赦,“玉大人,你說我怎么就攤上這事革砸〕悖” “怎么了窥翩?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鳞仙。 經(jīng)常有香客問我寇蚊,道長(zhǎng),這世上最難降的妖魔是什么棍好? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任仗岸,我火速辦了婚禮,結(jié)果婚禮上借笙,老公的妹妹穿的比我還像新娘扒怖。我一直安慰自己,他們只是感情好业稼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布盗痒。 她就那樣靜靜地躺著,像睡著了一般低散。 火紅的嫁衣襯著肌膚如雪俯邓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天熔号,我揣著相機(jī)與錄音稽鞭,去河邊找鬼。 笑死引镊,一個(gè)胖子當(dāng)著我的面吹牛朦蕴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弟头,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼吩抓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了赴恨?” 一聲冷哼從身側(cè)響起疹娶,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘱支,沒想到半個(gè)月后蚓胸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡除师,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扔枫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汛聚。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖短荐,靈堂內(nèi)的尸體忽然破棺而出倚舀,到底是詐尸還是另有隱情叹哭,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布痕貌,位于F島的核電站风罩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏舵稠。R本人自食惡果不足惜超升,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哺徊。 院中可真熱鬧室琢,春花似錦、人聲如沸落追。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)轿钠。三九已至巢钓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疗垛,已是汗流浹背竿报。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留继谚,地道東北人烈菌。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像花履,于是被迫代替她去往敵國(guó)和親芽世。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 安娜莎蜂漿紙 什么是蜂漿紙诡壁? 它就是一款集卸妝 深層清潔 潔面而且還很溫和的清潔類洗護(hù)產(chǎn)品济瓢!它還可以代替洗面...
    安娜莎護(hù)膚品閱讀 225評(píng)論 0 0
  • 一:獲得文檔對(duì)象 二:查詢和遍歷節(jié)點(diǎn) 三:創(chuàng)建元素并添加對(duì)應(yīng)節(jié)點(diǎn) 到此 文檔對(duì)象寫入已經(jīng)完成,目前改變后的文檔對(duì)象...
    di調(diào)的悲傷閱讀 251評(píng)論 0 0
  • 2017.12.15 提起睡眠妹卿,覺得最累的是做夢(mèng)旺矾。 帶過運(yùn)動(dòng)手環(huán),顯示即使我睡九到十個(gè)小時(shí)夺克,深度睡眠基本不足兩個(gè)小...
    花貓頭閱讀 363評(píng)論 0 1
  • 說是寂寞的秋的清愁箕宙, 說是遼遠(yuǎn)的海的相思。 假如有人問我的煩憂铺纽, 我不敢說出你的名字柬帕。 我不敢說出你的名字, 假如...
    簡(jiǎn)書茶館葉老板閱讀 1,051評(píng)論 3 14