10 積硅步,至千里——函數(shù)下

目錄

? 1. 函數(shù)的返回值
? 2. 文檔字符串
? 3. 函數(shù)的作用域
? 4. 命名空間
? 5. 遞歸函數(shù)

1. 函數(shù)的返回值

? 返回值就是函數(shù)執(zhí)行以后返回的結(jié)果
? 通過(guò)return來(lái)指定函數(shù)的返回值
? return后面可以跟任意對(duì)象,返回值甚至可以是一個(gè)函數(shù)

def fn():

    # return 100
    # return 'python'
    # return [1,2,3]
    # return {'name':'張三'}
    def fn2():
        print('hello')

    return fn2 #返回函數(shù)本身
r = fn()
print(r)
#<function fn.<locals>.fn2 at 0x000001D3338ACBF8>
print(fn())
#<function fn.<locals>.fn2 at 0x0000025DCF53CB70>
r()
# hello
- 如果僅僅寫(xiě)一個(gè)return,或者不寫(xiě)return,則相當(dāng)于return None
def fn2():

   return

r = fn2()
print(r)
# None
- 在函數(shù)中 return后面的代碼都不會(huì)執(zhí)行,return一旦執(zhí)行函數(shù)自動(dòng)結(jié)束
#沒(méi)講return什么喳整,還是返回none
def fn3():

    print('hello')
    return
    print('123')

r = fn3()
print(r)
# hello
# None



def fn3():

    print('hello')
    return
    print('123')

r = fn3()
# print(r)
r
# hello

return v.s. break

def fn4():

    for b in range(5):
        if b == 3:
            # break
            return # 用來(lái)結(jié)束函數(shù)
        print(b)
    print('循環(huán)執(zhí)行完畢')

fn4()
# 0   
# 1
# 2

def fn4():

    for b in range(5):
        if b == 3:
            break
            # return # 用來(lái)結(jié)束函數(shù)
        print(b)
    print('循環(huán)執(zhí)行完畢')

fn4()
# 0
# 1
# 2
# 循環(huán)執(zhí)行完畢
  • fn5和fn5()的區(qū)別
    fn5是函數(shù)對(duì)象 #print結(jié)果:func of f5...
    fn5()是在調(diào)用函數(shù)

2. 文檔字符串

? help()是Python中內(nèi)置函數(shù)该园,通過(guò)help()函數(shù)可以查詢(xún)Python中函數(shù)的用法每篷。

image.png

? 在定義函數(shù)時(shí)篇裁,可以在函數(shù)內(nèi)部編寫(xiě)文檔字符串菲饼,文檔字符串(```)就是對(duì)函數(shù)的說(shuō)明让腹。

def fn(a:bool,b:int,c:str)->int: #對(duì)傳參&返回值格式有要求

    '''
    這個(gè)函數(shù)式一個(gè)文檔字符串的實(shí)例
    參數(shù)
        a:作用 類(lèi)型 默認(rèn)值......
        b:作用 類(lèi)型 默認(rèn)值......
        c:作用 類(lèi)型 默認(rèn)值......


    '''

    return 100

help(fn)

3. 函數(shù)的作用域

? 作用域(scope):變量生效的區(qū)域

  • 在Python中一共有兩種作用域
全局作用域

? 全局作用域在程序執(zhí)行時(shí)創(chuàng)建远剩,在程序執(zhí)行結(jié)束時(shí)銷(xiāo)毀
? 所有函數(shù)以外的區(qū)域都是全局作用域
? 在全局作用域中定義的變量,都是全局變量骇窍,全局變量可以在程序的任意位置進(jìn)行訪問(wèn)

函數(shù)作用域

? 函數(shù)作用域在函數(shù)調(diào)用時(shí)創(chuàng)建民宿,在調(diào)用結(jié)束時(shí)銷(xiāo)毀
? 函數(shù)每調(diào)用一次就會(huì)產(chǎn)生一個(gè)新的函數(shù)作用域
? 在函數(shù)作用域中定義的變量,都是局部變量像鸡,它只能在函數(shù)內(nèi)部被訪問(wèn)

函數(shù)作用域可以從內(nèi)往外看活鹰,不能從外網(wǎng)內(nèi)調(diào)用
在函數(shù)內(nèi)部修改全局作用域 global 變量
def fn3():
    # global a
    a = 50

    print('函數(shù)內(nèi)部:','a =',a)

fn3()
print('函數(shù)外部:','a =',a)
# 函數(shù)內(nèi)部: a = 50
# 函數(shù)外部: a = 20
def fn3():
    # 如果希望在函數(shù)內(nèi)部修改全局變量,則使用global關(guān)鍵字,來(lái)聲明變量
    # 聲明在函數(shù)內(nèi)部使用的變量a是全局變量,則此時(shí)在去修改a時(shí)只估,就是在修改全局變量
    global a
    a = 50

    print('函數(shù)內(nèi)部:','a =',a)

fn3()
print('函數(shù)外部:','a =',a)
# 函數(shù)內(nèi)部: a = 50
# 函數(shù)外部: a = 50

4. 命名空間

? 命名空間實(shí)際上就是一個(gè)字典志群,是一個(gè)專(zhuān)門(mén)用來(lái)存儲(chǔ)變量的字典
? locals()用來(lái)獲取當(dāng)前作用域(函數(shù)/全局)的命名空間
? 如果在全局作用域中調(diào)用locals()則獲取全局命名空間,如果在函數(shù)作用域中調(diào)用locals()則獲取函數(shù)命名空間蛔钙。

def fn3():

    global a
    a = 50

    print('函數(shù)內(nèi)部:','a =',a)


s = locals()
print(s)
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002179630B240>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/Users/DELL/Desktop/基礎(chǔ)資料-第十講/課堂源碼/命名空間.py', '__cached__': None, 'a': 20, 'fn3': <function fn3 at 0x00000217946E1EA0>, 's': {...}}
s['c']=100 #在空間里新增一個(gè)鍵值對(duì)‘c’:100
print(c)
#100
  • 在函數(shù)中用globals()獲取全局命名空間
def fn4():

    # a = 10
    # s = locals() # 獲取函數(shù)內(nèi)部的命名空間
    # s['b'] = 20
    # print(s)

    global_s = globals()
    global_s['a'] = 30 #修改全局變量
    print(global_s)
fn4()
#{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000208D86AB240>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/Users/DELL/Desktop/基礎(chǔ)資料-第十講/課堂源碼/命名空間.py', '__cached__': None, 'a': 30, 'fn4': <function fn4 at 0x00000208D85A1EA0>}

? 返回值是一個(gè)字典

5. 遞歸函數(shù)

? 遞歸是解決問(wèn)題的一種方式锌云,它的整體思想,是將一個(gè)大問(wèn)題分解為一個(gè)個(gè)的小問(wèn)題吁脱,直到問(wèn)題無(wú)法分解時(shí)桑涎,在去解決問(wèn)題。

e.g.求任意數(shù)的階乘
# 求任意數(shù)的階乘
def fn(n):
    # 定義一個(gè)函數(shù)兼贡,儲(chǔ)存結(jié)果
    result=n
    for i in range(1,n):
        n*=i
    return result
print(fn(3))
  • 遞歸簡(jiǎn)單理解就是自己去引用自己
  • 遞歸式函數(shù)攻冷,在函數(shù)中自己調(diào)用自己
? 遞歸式函數(shù)有2個(gè)條件

? 1. 基線(xiàn)條件 問(wèn)題可以被分解為最小問(wèn)題,當(dāng)滿(mǎn)足基線(xiàn)條件時(shí)遍希,遞歸就不執(zhí)行了
? 2. 遞歸條件 可以將問(wèn)題繼續(xù)分解的條件

def fn2(n):

    # 參數(shù) n要求階乘的數(shù)字

    # 1.基線(xiàn)條件

    if n == 1:
        # 1的階乘就是1 直接返回結(jié)果
        return 1


    # 2.遞歸條件

    return n * fn2(n-1)

print(fn2(10))
#3628800
# 10**6=10*10**5
def fn(i,k):
    # 基數(shù)條件
    if k==1:
        return i
    # 遞歸運(yùn)算
    return i*fn(i,k-1) #i**(k-1)
print(fn(2,2))

找回文字符

def fn2(s):

  # 參數(shù)s就是要檢查的字符串

  # 1.基線(xiàn)條件
  # 字符串的長(zhǎng)度小于2 則字符串一定是個(gè)回文
  if len(s)<2:
      return True
  # # 第一個(gè)字符和最后一個(gè)字符不相同等曼,則一定不是回文字符串
  elif s[0] != s[-1]:
       return False
  # 2.遞歸條件
  return fn2(s[1:-1])


print(fn2('abcdefgfedcba'))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市凿蒜,隨后出現(xiàn)的幾起案子禁谦,更是在濱河造成了極大的恐慌,老刑警劉巖废封,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件州泊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡漂洋,警方通過(guò)查閱死者的電腦和手機(jī)遥皂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)力喷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人渴肉,你說(shuō)我怎么就攤上這事冗懦∷幔” “怎么了仇祭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)颈畸。 經(jīng)常有香客問(wèn)我乌奇,道長(zhǎng),這世上最難降的妖魔是什么眯娱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任礁苗,我火速辦了婚禮,結(jié)果婚禮上徙缴,老公的妹妹穿的比我還像新娘试伙。我一直安慰自己,他們只是感情好于样,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布疏叨。 她就那樣靜靜地躺著,像睡著了一般穿剖。 火紅的嫁衣襯著肌膚如雪蚤蔓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天糊余,我揣著相機(jī)與錄音秀又,去河邊找鬼。 笑死贬芥,一個(gè)胖子當(dāng)著我的面吹牛吐辙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蘸劈,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼袱讹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了昵时?” 一聲冷哼從身側(cè)響起捷雕,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎壹甥,沒(méi)想到半個(gè)月后救巷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡句柠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年浦译,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棒假。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡精盅,死狀恐怖帽哑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情叹俏,我是刑警寧澤妻枕,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站粘驰,受9級(jí)特大地震影響屡谐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蝌数,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一愕掏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧顶伞,春花似錦饵撑、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至挠锥,卻和暖如春众羡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蓖租。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工粱侣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蓖宦。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓齐婴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親稠茂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柠偶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

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

  • 本文的主題都是關(guān)于函數(shù)的??1. 函數(shù)的語(yǔ)法;??2. 函數(shù)的對(duì)象睬关;??3. 函數(shù)裝飾器诱担;??4. lambda表...
    楊強(qiáng)AT南京閱讀 884評(píng)論 0 1
  • 函數(shù)和對(duì)象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對(duì)于任何一門(mén)語(yǔ)言來(lái)說(shuō)都是核心的概念电爹。通過(guò)函數(shù)可以封裝任意多條語(yǔ)句蔫仙,而且...
    道無(wú)虛閱讀 4,564評(píng)論 0 5
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫(xiě)文章丐箩,發(fā)現(xiàn)簡(jiǎn)書(shū)還為我保存起的...
    Jenaral閱讀 2,760評(píng)論 2 9
  • 函數(shù)只定義一次摇邦,但可能被執(zhí)行或調(diào)用任意次恤煞。JS函數(shù)是參數(shù)化的,函數(shù)的定義會(huì)包括一個(gè)稱(chēng)為形參的標(biāo)識(shí)符列表施籍,這些參數(shù)在...
    PySong閱讀 526評(píng)論 0 0
  • 函數(shù)只定義一次居扒,但可能被執(zhí)行或調(diào)用任意次。JS函數(shù)是參數(shù)化的丑慎,函數(shù)的定義會(huì)包括一個(gè)稱(chēng)為形參的標(biāo)識(shí)符列表喜喂,這些參數(shù)在...
    PySong閱讀 853評(píng)論 0 0