內(nèi)置函數(shù)、作用域汤求、閉包俏险、遞歸

1.常見的內(nèi)置函數(shù):
查看內(nèi)置函數(shù)print(dir(__builtins__))
常見函數(shù):
len 求長度
min求最小值
max求最大值
sorted 排序
reversed反向
sum求和
type 對象類型
print輸出打印
help 查看相關(guān)方法屬性
range創(chuàng)建一個整數(shù)列表,一般用在 for 循環(huán)中
id查看對象內(nèi)存
hash哈希
查看內(nèi)置函數(shù)
li=dir(builtins)
li.index('abs')=>81
len(li[81:])
絕對值:abs(-3)=>-3
求和:sum([1,3]) =>4
返回浮點數(shù)x的四舍五入值:round(1.4) =>1扬绪,round(12.175,2)=>12.18
其他內(nèi)置參數(shù)竖独,請查看相關(guān)資料.

enumerate()內(nèi)置函數(shù),返回一個枚舉的對象挤牛;

對于一個可迭代的(iterable)/可遍歷的對象(如列表莹痢、字符串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值
enumerate(['a','b','c']) =>> <enumerate object at 0x031DF148>
list(enumerate(['a','b','c'])) =>> [(0, 'a'), (1, 'b'), (2, 'c')]
list(enumerate(['a','b','c'],2)) #2:就是從索引2開始
=>> [(2, 'a'), (3, 'b'), (4, 'c')]
無序的集合竞膳,字典 返回一個偽索引
list(enumerate((1,2,3,4))) #[(0, 1), (1, 2), (2, 3), (3, 4)]
list(enumerate({'a':1,'b':2})) #[(0, 'a'), (1, 'b')] 獲取鍵key

如果對一個列表航瞭,既要遍歷索引又要遍歷元素時,首先可以這樣寫:
lis = ['我','是','新手']
for i in range(len(lis)):
print(i,lis[i])
=>>
0 我
1 是
2 新手
上述方法有些累贅坦辟,利用enumerate()會更加直接和優(yōu)美
lis2 = ['我','是','新手']
for index,value in enumerate(lis2):
print(index,value)
=>>
0 我
1 是
2 新手

filter 過濾器

filter(function, sequence)刊侯,filter()函數(shù)接收一個函數(shù) f 和一個序列,filter()把傳入的函數(shù)依次作用于每個元素锉走,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素滨彻。filter()根據(jù)判斷結(jié)果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list挪蹭。
li=[1,2,3,4]
def guolv(x):
return x%2==1
li2=filter(guolv,li)
list(li2) =>>[1, 3]
另外一種方法:
list(filter(lambda x:x%2==1,li)) =>[1, 3]
利用filter()亭饵,可以完成很多有用的功能,例如梁厉,刪除 None 或者空字符辜羊,可見用filter()這個高階函數(shù),關(guān)鍵在于正確實現(xiàn)一個“篩選”函數(shù)词顾。

map 加工

map(function, sequence) 八秃,map()函數(shù)接收兩個參數(shù),一個是函數(shù)计技,一個是序列酝碳,map將傳入的函數(shù)依次作用到序列的每個元素虎锚,并把結(jié)果作為新的list返回悦即。
對sequence中的item依次執(zhí)行function(item)舶治,見執(zhí)行結(jié)果組成一個List返回:
def f(x):
return x*x
list(map(f,[1,2,3,4])) =>>[1, 4, 9, 16]

zip 壓縮印颤,將對象一一對應(yīng)

返回元組組成的迭代器骇两,zip是Python中的一個內(nèi)建函數(shù)寿酌,能夠用來組合多個序列類型的數(shù)據(jù)掉瞳。它會把傳入的所有序列中下標(biāo)相同的元素組成一個個元組饮醇,以最短的序列為基準(zhǔn)它抱。
實例1:
x=[1,2,3]
y=[4,5,6]
z=[7,8,9]
xyz=zip(x,y,z)
xyz
=>> <zip object at 0x04133968>
list(xyz)
=>> [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

實例2: 最終的長度以最短的序列長度為準(zhǔn)
x=[1,2,3]
y=[4,5,6,7]
xy = zip(x,y)
xy
=>> <zip object at 0x041339B8>
list(xy)
=>> [(1, 4), (2, 5), (3, 6)]

實例3:如果只有一個序列壓縮,那么同樣會返回元組:
x = [1, 2, 3]
list(zip(x))
=>> [(1,), (2,), (3,)]

所有的序列類型都可以進行壓縮朴艰,最終的長度以最短的序列長度為準(zhǔn)观蓄,不過字典在壓縮時只會保存的它的鍵:
a=[1,2,3]
b='abcde'
c={'one':1,'two':2}
z=zip(a,b,c)
z
=>> <zip object at 0x041498C8>
list(z)
=>> [(1, 'a', 'one'), (2, 'b', 'two')]

解壓
如果需要對壓縮過的對象進行解壓,只需要在之前添加一個星號*:
z=zip(*zip('python'))
list(z)
=>> [('p', 'y', 't', 'h', 'o', 'n')]

通過zip來進行字典的鍵值對翻轉(zhuǎn)
dict(spam = 1, egg = 2, bar =3)
=>> {'spam': 1, 'egg': 2, 'bar': 3}
dic = {'a':1,'b':2,'c':3}
list(zip(dic.values(),dic.keys()))
=>> [(1, 'a'), (2, 'b'), (3, 'c')]
dict(list(zip(dic.values(),dic.keys())))
=>> {1: 'a', 2: 'b', 3: 'c'}

變量的作用域

變量的作用域與其定義的方式有關(guān):
局部變量:變量在函數(shù)內(nèi)部定義祠墅,則變量的作用域在函數(shù)內(nèi)部
全局變量:變量在函數(shù)外部定義的侮穿,則變量的作用域是全局
x =1 #全局
def test1():
y = 2 #局部
print(x) #能訪問
test1()

def test2():
y=2
x+=1 #能訪問不能修改
print(x)
test2()
=>>UnboundLocalError: local variable 'x' referenced before assignment

def test3():
y=2
global x #全局變量可以在函數(shù)內(nèi)部訪問,但是不能改變毁嗦。如果要修改則用global來修飾
x+=1
print(x)
test3()
局部變量全局不能訪問
def fun1():
g = 1
print(g)
print(g) =>>SyntaxError: unindent does not match any outer indentation level

def fun2():
global g #局部變量只能在局部進行訪問和修改亲茅。如果在函數(shù)外部,想訪問局部變量,也可以用 global克锣,將局部變量聲明為全局變量
g = 1
print(g)
print(g)
fun2() =>> 1
總結(jié):global:用來在函數(shù)或其他局部作用域中茵肃,聲明全局變量。 (作用于全局)
使用global情況:
1 全局變量可以在函數(shù)內(nèi)部訪問袭祟,但是不能改變验残。如果在函數(shù)內(nèi)部想修改全局變量,可以用 global 來修飾變量巾乳。
2 局部變量只能在局部進行訪問和修改您没。如果在函數(shù)外部,想訪問局部變量想鹰,也可以用 global紊婉,將局部變量聲明為全局變量。

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

在函數(shù)內(nèi)部定義函數(shù)辑舷,就是函數(shù)里面嵌套函數(shù)


image.png

nonlocal:用來在函數(shù)或其他作用域中喻犁,聲明外層(非全局)變量。(作用于局部) 何缓。
使用nonlocal的情況:
當(dāng)里層局部肢础,需要修改外層局部時,需要使用nonlocal碌廓。 (如嵌套函數(shù))


image.png

閉包

閉包:一個閉包就是你調(diào)用了一個函數(shù)A传轰,這個函數(shù)A返回了一個函數(shù)B給你。這個返回的函數(shù)B就叫做閉包谷婆。(但是B函數(shù)慨蛙,一定要是嵌套在函數(shù)A里面) 。你在調(diào)用函數(shù)A的時候傳遞的參數(shù)就是自由變量纪挎。
總結(jié):一個函數(shù)里面嵌套一個函數(shù)期贫,調(diào)用外面這個函數(shù),就返回里面嵌套的函數(shù)异袄。
def fun2(a):
print(a)
def fun3(b):
print(a,b)
return fun3
g=fun2(1)
=>> 1
g(2)
=>>1 2

回調(diào)函數(shù)

image.png
image.png

遞歸函數(shù)

遞歸: 函數(shù)調(diào)用自己本身
遞歸的核心:
1.遞歸推導(dǎo)式
2.遞歸終止條件

作業(yè)

1.定義一個函數(shù)通砍,輸入一個序列(序列元素是同種類型),判斷序列是順序還是逆序烤蜕,順序輸出UP封孙,逆序輸出DOWN,否則輸出None

def judge(seq):
seq = list(seq) #sorted函數(shù)返回新的列表list,所以在此處轉(zhuǎn)換為列表讽营,否則如果是其他序列類型虎忌,則不行,以便下面==判斷
if sorted(seq) == seq:
print('UP,從小到大')
elif sorted(seq,reverse=True) == seq:
print('DOWN,從大到小')
else:
print('None 無規(guī)律')

注意:
sorted(內(nèi)置函數(shù)斑匪,屬于python) sort(屬于列表)
li.sort()
sorted(li)
reversed(sequence) -> reverse iterator over values of the sequence
li = [1,99,66,33]
list(reversed(li))

  1. 寫一個函數(shù)呐籽,對列表li = [9,8,3,2,6,4,5,7,1]锋勺,進行從小到大的排序。最后返回li狡蝶。
    方法1:
    def fun(li):
    li.sort()
    return li
    方法2:
    def fun2(li):
    return sorted(li)
    li = [9,8,3,2,6,4,5,7,1]
    fun(li)
    print(li)
    方法3:冒泡排序:
    def fun3(li):
    for i in range(len(li)-1):
    for j in range(len(li)-i-1):
    if li[j] > li[j+1]:
    li[j],li[j+1]=li[j+1],li[j]

  2. 一個列表庶橱,有4個由數(shù)字組成的長度為4的元組,對這四個元組贪惹,
    按每個元組的第2個數(shù)字大小排序苏章。
    li =[(1,3,5,4),(5,2,3,6),(5,8,3,9),(8,1,3,9)]
    li.sort(key=lambda x:x[1]) #key為函數(shù),指定取待排序元素的哪一項進行排序
    print(li)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奏瞬,一起剝皮案震驚了整個濱河市枫绅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硼端,老刑警劉巖并淋,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異珍昨,居然都是意外死亡县耽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門镣典,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兔毙,“玉大人,你說我怎么就攤上這事兄春∨彀” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵赶舆,是天一觀的道長哑姚。 經(jīng)常有香客問我,道長芜茵,這世上最難降的妖魔是什么蜻懦? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮夕晓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悠咱。我一直安慰自己蒸辆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布析既。 她就那樣靜靜地躺著躬贡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪眼坏。 梳的紋絲不亂的頭發(fā)上拂玻,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機與錄音,去河邊找鬼檐蚜。 笑死魄懂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的闯第。 我是一名探鬼主播市栗,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咳短!你這毒婦竟也來了填帽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤咙好,失蹤者是張志新(化名)和其女友劉穎篡腌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勾效,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡嘹悼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了葵第。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绘迁。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖卒密,靈堂內(nèi)的尸體忽然破棺而出缀台,到底是詐尸還是另有隱情,我是刑警寧澤哮奇,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布膛腐,位于F島的核電站,受9級特大地震影響鼎俘,放射性物質(zhì)發(fā)生泄漏哲身。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一贸伐、第九天 我趴在偏房一處隱蔽的房頂上張望勘天。 院中可真熱鬧,春花似錦捉邢、人聲如沸脯丝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宠进。三九已至,卻和暖如春藐翎,著一層夾襖步出監(jiān)牢的瞬間材蹬,已是汗流浹背实幕。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留堤器,地道東北人昆庇。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像吼旧,于是被迫代替她去往敵國和親凰锡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

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