函數(shù)進階_1

目錄

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

1. 函數(shù)返回值

返回值就是函數(shù)執(zhí)行以后返回的結果

通過return來指定函數(shù)的返回值

return后面可以跟任意且不限于一個的對象,返回值甚至可以是一個函數(shù)

# 求任意數(shù)的和

def fn(*nums):

    result = 0

    for n in nums:

        result += n

    # print(result)
    return result
    print('我不會執(zhí)行')

r = fn(1,2)
  • 在函數(shù)中 return后面的代碼都不會執(zhí)行,return一旦執(zhí)行函數(shù)自動結束

  • 注意調用函數(shù)和函數(shù)對象的區(qū)別

def fn1():

    return 100

print(fn1)
print(fn1())
  • fn1和fn1()的區(qū)別:
    fn1是函數(shù)對象
    fn1()是在調用函數(shù)

2. 文檔字符串和help()

  • help()是Python中內置函數(shù),通過help()函數(shù)可以查詢Python中函數(shù)的用法
    可以試著打印help(print)摔认,即可查看print()函數(shù)的更多神奇操作秘车。
  • 在定義函數(shù)時蚌卤,可以在函數(shù)內部編寫文檔字符串(三個引號包圍的字符串)末早,文檔字符串就是對函數(shù)的說明
# 自定義函數(shù)

def fn(a, b, c):
    """
    這個函數(shù)式一個文檔字符串的實例
    參數(shù)
        a:作用 類型 默認值......
        b:作用 類型 默認值......
        c:作用 類型 默認值......

    """

    return 100


help(fn)
  1. 函數(shù)的作用域

Python 中啊片,程序的變量并不是在哪個位置都可以訪問的赎婚,訪問權限決定于這個變量是在哪里賦值的刘绣。
變量的作用域決定了在哪一部分程序可以訪問哪個特定的變量名稱。
所以作用域指的就是變量生效的區(qū)域

  • Python的作用域一共有4種挣输,分別是:
    ? L(local):局部作用域纬凤,即函數(shù)中定義的變量;
    ? E(enclosing):嵌套的父級函數(shù)的局部作用域,即包含此函數(shù)的上級函數(shù)的局部作用域撩嚼,但不是全局的;
    ? G(global):全局變量停士,就是模塊級別定義的變量;
    ? B(build-in):內建作用域挖帘,系統(tǒng)固定模塊里面的變量,比如:int()等;

簡單介紹兩種:

  • 全局作用域
    ? 全局作用域在程序執(zhí)行時創(chuàng)建恋技,在程序執(zhí)行結束時銷毀
    ? 所有函數(shù)以外的區(qū)域都是全局作用域
    ? 在全局作用域中定義的變量拇舀,都是全局變量,全局變量可以在程序的任意位置進行訪問
  • 函數(shù)作用域
    ? 函數(shù)作用域在函數(shù)調用時創(chuàng)建蜻底,在調用結束時銷毀
    ? 函數(shù)每調用一次就會產生一個新的函數(shù)作用域
    ? 在函數(shù)作用域中定義的變量骄崩,都是局部變量,它只能在函數(shù)內部被訪問
  • 函數(shù)作用域優(yōu)先級
    局部作用域(L)>父級函數(shù)作用域(E)>全局作用域(G)>系統(tǒng)模塊(B)

注意:
? 如果在函數(shù)中修改全局變量薄辅,那么就需要使用global進行聲明要拂,否則出錯
? 如果全局變量的名字和局部變量的名字相同,那么使用的是局部變量的站楚,小技巧強龍不壓地頭蛇

global的本質:

1.在函數(shù)中不使用global聲明全局變量時不能修改全局變量的本質是不能修改全局變量的指向脱惰,即不能將全局變量指向新的數(shù)據(jù)。

2.對于不可變類型的全局變量來說窿春,因其指向的數(shù)據(jù)不能修改拉一,所以不使用global時無法修改全局變量。

3.對于可變類型的全局變量來說旧乞,因其指向的數(shù)據(jù)可以修改舅踪,所以不使用global時也可修改全局變量。

4. 命名空間

命名空間實際上就是一個字典良蛮,是一個專門用來存儲變量的字典
locals()用來獲取當前作用域的命名空間

如果在全局作用域中調用locals()則獲取全局命名空間,如果在函數(shù)作用域中調用locals()則獲取函數(shù)命名空間

返回值是一個字典

a = 20

def fn3():

    global a
    a = 50

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

s = locals()

print(s)
print(a)
print(s['a'])

5. 遞歸函數(shù)

遞歸是解決問題的一種方式悍赢,它的整體思想决瞳,是將一個大問題分解為一個個的小問題,直到問題無法分解時左权,在去解決問題

  • 遞歸式函數(shù)有2個條件
    1.基線條件 問題可以被分解為最小問題皮胡,當滿足基線條件時,遞歸就不執(zhí)行了
    2.遞歸條件 可以將問題繼續(xù)分解的條件

遞歸簡單理解就是自己去引用自己
遞歸式函數(shù)即在函數(shù)中自己調用自己
無窮遞歸 類似于死循環(huán)

  • eg:用遞歸的方式求任意數(shù)的階乘
# 用遞歸的方式求任意數(shù)的階乘
# 10赏迟!= 10 * 9屡贺!
# 9! = 9 * 8锌杀!
# 8甩栈! = 8 * 7!
# ....
# 1! = 1


def fn2(n):

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

    # 1.基線條件

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


    # 2.遞歸條件

    return n * fn2(n-1)

print(fn2(10))
  • Q.思考一下,按照遞歸的特性,在編程中有沒有不得不使用遞歸的情況?
    A:有糕再。例如漢諾塔,目錄索引(因為你永遠不知道這個目錄里邊是否還有目錄) , 快速排序(二十世紀十大算法之一)量没,樹結構的定義等如果使用遞歸,會事半功倍,否則會導致程序無法實現(xiàn)或相當難以理解突想。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末殴蹄,一起剝皮案震驚了整個濱河市究抓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌袭灯,老刑警劉巖刺下,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異稽荧,居然都是意外死亡橘茉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門蛤克,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捺癞,“玉大人,你說我怎么就攤上這事构挤∷杞椋” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵筋现,是天一觀的道長唐础。 經常有香客問我,道長矾飞,這世上最難降的妖魔是什么一膨? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮洒沦,結果婚禮上豹绪,老公的妹妹穿的比我還像新娘。我一直安慰自己申眼,他們只是感情好瞒津,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著括尸,像睡著了一般巷蚪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上濒翻,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天屁柏,我揣著相機與錄音,去河邊找鬼有送。 笑死淌喻,一個胖子當著我的面吹牛,可吹牛的內容都是我干的雀摘。 我是一名探鬼主播似嗤,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼届宠!你這毒婦竟也來了烁落?” 一聲冷哼從身側響起乘粒,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伤塌,沒想到半個月后灯萍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡每聪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年旦棉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片药薯。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡绑洛,死狀恐怖,靈堂內的尸體忽然破棺而出童本,到底是詐尸還是另有隱情真屯,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布穷娱,位于F島的核電站绑蔫,受9級特大地震影響,放射性物質發(fā)生泄漏泵额。R本人自食惡果不足惜配深,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嫁盲。 院中可真熱鬧篓叶,春花似錦、人聲如沸羞秤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锥腻。三九已至,卻和暖如春母谎,著一層夾襖步出監(jiān)牢的瞬間瘦黑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工奇唤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留幸斥,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓咬扇,卻偏偏與公主長得像甲葬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子懈贺,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容