Python-函數(shù)的總結(jié)

一 阎毅、為什么用函數(shù):

1、 代碼重復(fù)

2点弯、 代碼可描述性不高

3扇调、 代碼太low

函數(shù)是以功能為導(dǎo)向,一個(gè)函數(shù)封裝一個(gè)功能抢肛,函數(shù)減少代碼的重復(fù)性狼钮,增強(qiáng)了代碼的可讀性。

二 雌团、函數(shù)的結(jié)構(gòu)燃领、調(diào)用和返回值


def func():

    pass

func()

return:給函數(shù)的執(zhí)行者返回具體的值士聪、在函數(shù)中遇到return直接結(jié)束函數(shù)锦援。
1.函數(shù)中沒(méi)有return或者只有寫一個(gè)return,函數(shù)的執(zhí)行者得到的是None剥悟。
2.函數(shù)中return后面只寫一個(gè)參數(shù) 執(zhí)行者得到的就是這個(gè)參數(shù)(不改變值得類型)
3.return 返回多個(gè)元素 是以元組的形式返回給函數(shù)的執(zhí)行者灵寺。

三 、函數(shù)的傳參

分兩個(gè)角度:實(shí)參区岗、形參略板。

實(shí)參角度:
    位置參數(shù)    (從左至右,按照順序慈缔,一一對(duì)應(yīng))
    關(guān)鍵字參數(shù)   (一一對(duì)應(yīng))
    混合參數(shù)    (位置參數(shù)一定要在關(guān)鍵字參數(shù)的前面叮称。)
形參角度:
    位置參數(shù)    (與實(shí)參角度參數(shù)一樣)
    默認(rèn)參數(shù)    (意義:普遍經(jīng)常使用的。一定在位置參數(shù)后面,不傳參數(shù)即沿用默認(rèn)的參數(shù))
    動(dòng)態(tài)參數(shù)     (*args,**kwargs)
#*代表聚合瓤檐。 他將實(shí)參角度所有的位置參數(shù)聚合成一個(gè)元組赂韵,賦值給了 args
#** 將實(shí)參角度所有的關(guān)鍵字參數(shù)聚合到一個(gè)字典中,將這個(gè)字典賦值給了kwargs
#*的魔性用法:(當(dāng)函數(shù)執(zhí)行時(shí):*代表打散)返回的是元祖
#** 的魔性用法:(當(dāng)函數(shù)執(zhí)行中:**dict  代表打散)返回的是字典
    僅限關(guān)鍵字參數(shù)(沒(méi)用)

四 挠蛉、 名稱空間祭示、作用域

全局名稱空間:py文件運(yùn)行時(shí),存放的是執(zhí)行的py文件(除去函數(shù)內(nèi)部)的所有的變量與值(地址)的對(duì)應(yīng)關(guān)系谴古,整個(gè)py文件結(jié)束之后质涛,才會(huì)消失.
臨時(shí)(局部)名稱空間:函數(shù)執(zhí)行時(shí),在內(nèi)存中臨時(shí)開(kāi)辟的一個(gè)空間掰担,存在的函數(shù)中的變量與值得對(duì)應(yīng)關(guān)系汇陆,隨著函數(shù)的結(jié)束而消失.
內(nèi)置名稱空間:print input 內(nèi)置函數(shù)等.

LEGB原則:(從局部找時(shí))局部名稱空間 ---> 全局名稱空間 ---> 內(nèi)置名稱名稱空間

全局作用域:內(nèi)置名稱空間 全局名稱空間
局部作用域:局部名稱空間(局部作用域不能改變?nèi)肿兞?
globals(獲取全局作用域)
locals(獲取當(dāng)前作用域)
global:可以在局部作用域聲明一個(gè)全局變量,也可以更改全局變量
nonlocal:不能夠操作全局變量带饱。(內(nèi)層函數(shù)對(duì)外層函數(shù)的局部變量進(jìn)行修改瞬测。并且在當(dāng)前作用域創(chuàng)建(復(fù)制)一份此變量。)

五 纠炮、迭代器和生成器

 內(nèi)部含有__iter__方法的對(duì)象月趟,就是可迭代對(duì)象(dir()判斷是否是可迭代對(duì)象)
 內(nèi)部含有__iter__并且含有__next__方法的對(duì)象,就是迭代器(迭代器可以迭代取值恢口。利用next()進(jìn)行取值)
 可迭代對(duì)象:可迭代對(duì)象是一個(gè)操作比較靈活孝宗,直觀,效率相對(duì)高耕肩,但是比較占用內(nèi)存的數(shù)據(jù)集因妇。
 迭代器:迭代器是一個(gè)非常節(jié)省內(nèi)存,滿足惰性機(jī)制猿诸,但是效率相對(duì)低婚被,操作不靈活的數(shù)據(jù)集。
生成器和迭代器的唯一的區(qū)別:生成器是我們自己用python代碼構(gòu)建的數(shù)據(jù)結(jié)構(gòu)梳虽。迭代器都是提供的址芯,或者轉(zhuǎn)化得來(lái)的。
獲取生成器的三種方式:
    生成器函數(shù)
    生成器表達(dá)式
    python內(nèi)部提供的一些
yield 窜觉、return區(qū)別
return:函數(shù)中只存在一個(gè)return結(jié)束函數(shù)谷炸,并且給函數(shù)的執(zhí)行者返回值。(多個(gè)值通過(guò)元組的形式返回)
yield:只要函數(shù)中有yield那么它就是生成器函數(shù)而不是函數(shù)了禀挫。生成器函數(shù)中可以存在多個(gè)yield旬陡,yield不會(huì)結(jié)束生成器函數(shù),一個(gè)yield對(duì)應(yīng)一個(gè)next语婴。(多個(gè)值以元組的形勢(shì)返回)
yield from 將一個(gè)可迭代對(duì)象的每一個(gè)元素返回給next
yield from 節(jié)省代碼描孟,提升效率(代替了for循環(huán))

六 驶睦、列表表達(dá)式和生成器表達(dá)式

列表推導(dǎo)式:一行代碼構(gòu)建一個(gè)有規(guī)律比較復(fù)雜的列表
1.循環(huán)模式: [變量(加工后的變量) for 變量 in iterable]
2.篩選模式: [變量(加工后的變量) for 變量 in iterable if 條件]
生成器表達(dá)式:與列表推導(dǎo)式一樣(取值用next)

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

Python有68種內(nèi)置函數(shù)

eval()  慎用 eval 剝?nèi)プ址耐庖履湫眩祷乩锩娴谋举|(zhì)
exec() 代碼流啥繁,過(guò)程
hash() 哈希值
help() 幫助
callable() 判斷一個(gè)對(duì)象是否可被調(diào)用 
int()  取整數(shù)
bin() 將十進(jìn)制轉(zhuǎn)換成二進(jìn)制并返回
ord() 輸入字符找該字符編碼的位置
chr() 輸入位置數(shù)字找出其對(duì)應(yīng)的字符
repr() 原形畢露
sep 設(shè)定分割符
end 默認(rèn)是換行可以打印到一行
list:創(chuàng)建列表
dict:創(chuàng)建字典
abs()  獲取絕對(duì)值
sum() 數(shù)字相加求和
min 可以加功能  以絕對(duì)值的方式取最小值(可以加匿名函數(shù))
max() 與min 相同。
reversed()  對(duì)一個(gè)可迭代對(duì)象進(jìn)行翻轉(zhuǎn)青抛,返回一個(gè)迭代器
zip 拉鏈方法 返回一個(gè)迭代器
sorted 排序(可以加key)
filter  返回一個(gè)生成器  # 生成器表達(dá)式的篩選模式
map 返回一個(gè)迭代器旗闽,相當(dāng)于生成器表達(dá)式:循環(huán)模式
reduce python3x 從內(nèi)置函數(shù)剔除了。是一個(gè)累加函數(shù)這個(gè)函數(shù)必須接受兩個(gè)參數(shù)蜜另,把結(jié)果繼續(xù)和序列的下一個(gè)元素做累計(jì)算

八 适室、 閉包、裝飾器

    閉包有什么作用:封裝東西举瑰、保證數(shù)據(jù)安全
    被引用的非全局變量也稱作自由變量捣辆,這個(gè)自由變量會(huì)與內(nèi)層函數(shù)產(chǎn)生一個(gè)綁定關(guān)系,
    自由變量不會(huì)再內(nèi)存中消失此迅。
    如何判斷一個(gè)嵌套函數(shù)是不是閉包
    閉包只能存在嵌套函數(shù)中汽畴。
    內(nèi)層函數(shù)對(duì)外層函數(shù)非全局變量的引用(使用),就會(huì)形成閉包耸序。
開(kāi)放封閉原則
裝飾器:在不改變?cè)瘮?shù)的代碼以及調(diào)用方式的前提下忍些,為其增加新功能
標(biāo)準(zhǔn)的裝飾器:
def wrapper(f):
    def inner(*args,**kwargs):
        '''添加額外的功能:執(zhí)行被裝飾函數(shù)之前的操作'''
        ret = f(*args,**kwargs)
        ''''添加額外的功能:執(zhí)行被裝飾函數(shù)之后的操作'''
        return ret
    return inner
帶參數(shù)的裝飾器:
def wrapper_out(n):
   def wrapper(f):
      def inner(*args,**kwargs):
        '''添加額外的功能:執(zhí)行被裝飾函數(shù)之前的操作'''
        ret = f(*args,**kwargs)
        ''''添加額外的功能:執(zhí)行被裝飾函數(shù)之后的操作'''
        return ret
    return inner
@wrapper_out('參數(shù)')
多個(gè)裝飾器裝飾一個(gè)函數(shù):
def wrapper1(func1): 
    def inner1():
        print('wrapper1 ,before func') 
        func1()
        print('wrapper1 ,after func') 
    return inner1

def wrapper2(func2): 
    def inner2():
        print('wrapper2 ,before func') 
        func2()  
        print('wrapper2 ,after func')  
    return inner2

@wrapper2 
@wrapper1
def f():
    print('in f') 
f()  

九 、 遞歸函數(shù)

遞歸的最大深度1000層 : 為了節(jié)省內(nèi)存空間,不要讓用戶無(wú)限使用內(nèi)存空間
一個(gè)遞歸函數(shù)要想結(jié)束,必須在函數(shù)內(nèi)寫一個(gè)return,并且return的條件必須是一個(gè)可達(dá)到的條件

遞歸個(gè)列表里面的列表
l1 = [1, 3, 5, ['上海','北京', 34, [33, 55, [11,33]]], [77, 88],66]
def func(alist):
    for i in alist:
        if type(i) == list:
            func(i)  
        else:
            print(i)    #python3
func(l1)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坎怪,一起剝皮案震驚了整個(gè)濱河市罢坝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搅窿,老刑警劉巖嘁酿,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異男应,居然都是意外死亡闹司,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門沐飘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)游桩,“玉大人,你說(shuō)我怎么就攤上這事薪铜≈诠” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵隔箍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我脚乡,道長(zhǎng)蜒滩,這世上最難降的妖魔是什么滨达? 我笑而不...
    開(kāi)封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮俯艰,結(jié)果婚禮上捡遍,老公的妹妹穿的比我還像新娘。我一直安慰自己竹握,他們只是感情好画株,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著谓传,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芹关。 梳的紋絲不亂的頭發(fā)上续挟,一...
    開(kāi)封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音侥衬,去河邊找鬼诗祸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛轴总,可吹牛的內(nèi)容都是我干的直颅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼怀樟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼际乘!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起漂佩,我...
    開(kāi)封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤脖含,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后投蝉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體养葵,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年瘩缆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了关拒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庸娱,死狀恐怖着绊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情熟尉,我是刑警寧澤归露,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站斤儿,受9級(jí)特大地震影響剧包,放射性物質(zhì)發(fā)生泄漏恐锦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一疆液、第九天 我趴在偏房一處隱蔽的房頂上張望一铅。 院中可真熱鬧,春花似錦堕油、人聲如沸潘飘。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卜录。三九已至,卻和暖如春攀圈,著一層夾襖步出監(jiān)牢的瞬間暴凑,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工赘来, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留现喳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓犬辰,卻偏偏與公主長(zhǎng)得像嗦篱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子幌缝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • 內(nèi)置函數(shù)Python解釋器內(nèi)置了許多功能和類型,總是可用的灸促。他們是按字母順序列在這里。 abs(x)返回一個(gè)數(shù)的絕...
    uangianlap閱讀 1,226評(píng)論 0 0
  • 一典鸡、常見(jiàn)的內(nèi)置函數(shù) 1. 查看內(nèi)置函數(shù): 2. 常見(jiàn)函數(shù): 3. 進(jìn)制轉(zhuǎn)換函數(shù): 4. 補(bǔ)充: (1) enume...
    奮斗在阿爾卑斯的皮卡丘閱讀 805評(píng)論 0 0
  • 變量 命令a = 1,解釋器會(huì)創(chuàng)建整形1和變量a坏晦,并把a(bǔ)指向1萝玷,整形1也可以是各種類型的數(shù)據(jù). 函數(shù) 函數(shù)是指將一...
    Knight方閱讀 387評(píng)論 0 1
  • 我是一個(gè)語(yǔ)言功底很差的人,前方高能,請(qǐng)謹(jǐn)慎閱讀! 成長(zhǎng) 我的個(gè)性是一種十分開(kāi)朗的個(gè)性焦读。 這種個(gè)性大部分情況下還算比...
    wenwugu閱讀 385評(píng)論 0 0
  • 正院內(nèi) 安王和王妃正在屋中下棋。 黑子沖鋒陷陣多律,棋風(fēng)凌厲痴突;白子收放自如搂蜓,棋風(fēng)溫和狼荞。 黑子暗藏殺機(jī)辽装,白子以退為進(jìn)。 ...
    君清兮閱讀 299評(píng)論 0 0