函數(shù)入門小知識

1鸠蚪、函數(shù)的概念
  • 函數(shù)就是對實現(xiàn)某一特定功能的代碼段的封裝 (類似于機器)
2、函數(shù)的分類(誰定義的)
  • 系統(tǒng)函數(shù) - 系統(tǒng)已經(jīng)定義了,程序可以直接使用的函數(shù)茅信;比如:print盾舌、input、type蘸鲸、ord妖谴、chr、len等等酌摇。

  • 自定義函數(shù) - 程序員自己定義使用的函數(shù)膝舅。

一、函數(shù)的參數(shù)

  • 位置參數(shù)和關(guān)鍵字參數(shù)(實參分類)

1窑多、位置參數(shù)
實參直接寫(直接將多個數(shù)據(jù)用逗號隔開)仍稀,讓實參和形參從位置上一一對應(yīng)

def func1(a, b, c):
    print(f'a:{a}, b:, c:{c}')

2埂息、 關(guān)鍵字參數(shù)
以:形參名1=值1,形參名2=值2,.... 的形式傳參

func1(a=20, b=30, c=40)

3技潘、位置參數(shù)和關(guān)鍵字參數(shù)混合
要求: 位置參數(shù)必須在關(guān)鍵字參數(shù)的前面

func1(10, c=30, b=20)    # a:10, b:20, c:30
func1(10, 20, c=30)    # a:10, b:20, c:30
# func1(a=10, 20, 30)  # SyntaxError: positional argument follows keyword argument

4、參數(shù)默認值(形參)

定義函數(shù)的時候可以以: 形參名=值 的形式給參數(shù)賦默認值, 調(diào)用函數(shù)的時候有默認值的參數(shù)可以不用傳參

注意:沒有默認值的參數(shù)必須放在有默認值參數(shù)的前面

5千康、不定長參數(shù)(定義)

定義參數(shù)的時候參數(shù)個數(shù)不確定就可以使用不定長參數(shù)

    1. 在形參前加 *

帶一個*的形參享幽,本質(zhì)就是一個元組,對應(yīng)的實參會作為這個元組的元素拾弃。
這種不定長參數(shù)的函數(shù)只能用位置參數(shù)傳參

    1. 在形參前加 **

帶兩個*的形參值桩,本質(zhì)就是一個字典,對應(yīng)的實參會作為這個字典的值砸彬。
這種不定長參數(shù)的函數(shù)只能用關(guān)鍵字參數(shù)傳參

# 例子:定義一個函數(shù)可以求多個數(shù)的和
def yt_sum(*num):
    sum1 = 0
    for x in num:
        sum1 += x
    print(sum1)

yt_sum(10, 20)
yt_sum(1, 2, 3, 4, 5)

# 在形參前加 **
def yt_sum2(**num):
    print(num)

yt_sum2(a=10, b=20)

二颠毙、函數(shù)的返回值

  • 返回值是從函數(shù)里面?zhèn)鬟f到函數(shù)外面的數(shù)據(jù),return 關(guān)鍵字后面的表達式的值砂碉。
  • return - 關(guān)鍵字蛀蜜,只能出現(xiàn)在函數(shù)體中

? a.將數(shù)據(jù)從函數(shù)內(nèi)容扔到函數(shù)的外部

? b. 結(jié)束函數(shù)(執(zhí)行函數(shù)的時候只要遇到return函數(shù)直接結(jié)束

  • 表達式 :可以一個都沒有(相當于 None),可以有一個(返回值就是指定數(shù)據(jù))增蹭,也可以有多個(本質(zhì)返回的是一個元組)

注意: 如果一個函數(shù)中沒有return(或者執(zhí)行函數(shù)體的時候沒有遇到 return)那么這個函數(shù)的返回值就是 None

三滴某、全局變量和局部變量

函數(shù)調(diào)用過程中內(nèi)存的變化:每次在調(diào)用函數(shù)的時候,系統(tǒng)會自動為這個函數(shù)創(chuàng)建一個獨立的棧區(qū)間滋迈,用來保存函數(shù)運行過程中產(chǎn)生的數(shù)據(jù)(函數(shù)的參數(shù)霎奢;函數(shù)中聲明的變量);當函數(shù)調(diào)用結(jié)束后這個棧區(qū)間會自動銷毀饼灿。(壓棧)

1幕侠、全局變量
  • 沒有定義在函數(shù)里面或者類里面的變量就是全局變量
  • 作用域:從定義開始到程序結(jié)束的任何位置都可以使用
a = 10
print(a)

# 變量a、b碍彭、c都是全局變量
for b in range(5):
    c = 10
    print('b循環(huán)中', b, c)

print('b循環(huán)外:', b, c)
2晤硕、局部變量
  • 定義在函數(shù)中的變量就是局部變量(形參是局部變量悼潭,注意:定義函數(shù)的時候給形參賦的默認值其實是保存在堆里面的)(類里面的變量叫屬性)
  • 作用域:從定義開始到函數(shù)結(jié)束的任何位置都可以使用
def func3():
    # 變量x是局部變量
    x = 100
    print(x)
    for _ in range(3):
        print('x2:', x)

3. global 和 nonlocal

1) global:
  • 在函數(shù)中聲明指定的變量是全局變量作用:

    a. 在函數(shù)中修改全局變量的值

    b. 在函數(shù)中定義一個全局變量

注意:聲明必須放在使用變量前

name = '張三'
def change():
    # 在函數(shù)中修改全局變量name的值
    global name

    print(name)
    name = '李四'

    # 在函數(shù)中定義全局變量 age
    global age
    age = 18


change()
print(name)
print(age)
2、nonlocal(了解)

如果希望在局部的局部中去修改局部變量的值舞箍,就可以用 nonlocal 進行說明

def func4():
    m = 100

    def func5():
        nonlocal m
        m = 200
        print('m1:', m)

    func5()
    print('m2:', m)

func4()

四舰褪、匿名函數(shù)

函數(shù)名 = lambda 形參列表:返回值

# 定義一個匿名函數(shù)求兩個數(shù)的和
x = lambda num1, num2: num1+num2   
# 調(diào)用匿名函數(shù)
print(x(100, 200))

#寫一個匿名函數(shù)用來判斷指定的年齡是否成年般婆,根據(jù)情況返回成年或未成年
is_adult = lambda age: '成年' if age >= 18 else '未成年'
print(is_adult(87))

五串稀、遞歸函數(shù)

  • 在函數(shù)內(nèi)調(diào)用函數(shù)本身的函數(shù)就是遞歸函數(shù)(自己調(diào)用自己)
  • 循環(huán)能做的事情遞歸都可以做(能用循環(huán)最好不用遞歸属提,因為每調(diào)用一次函數(shù)就會開辟一個內(nèi)存存儲新的數(shù)據(jù))
# 2.用遞歸計算斐波那契數(shù)列第20個數(shù):1馅闽,1,2武鲁,3故源,5隙咸,8立砸,13掖疮,21,34颗祝,...
def series(n):
    # 1.找臨界值
    if n == 1 or n == 2:
        return 1
    return series(n-1) + series(n-2)


print(series(20))   
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市恼布,隨后出現(xiàn)的幾起案子螺戳,更是在濱河造成了極大的恐慌,老刑警劉巖折汞,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倔幼,死亡現(xiàn)場離奇詭異,居然都是意外死亡爽待,警方通過查閱死者的電腦和手機损同,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸟款,“玉大人膏燃,你說我怎么就攤上這事『问玻” “怎么了组哩?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長处渣。 經(jīng)常有香客問我伶贰,道長,這世上最難降的妖魔是什么罐栈? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任黍衙,我火速辦了婚禮,結(jié)果婚禮上荠诬,老公的妹妹穿的比我還像新娘琅翻。我一直安慰自己位仁,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布望迎。 她就那樣靜靜地躺著障癌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辩尊。 梳的紋絲不亂的頭發(fā)上涛浙,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音摄欲,去河邊找鬼轿亮。 笑死,一個胖子當著我的面吹牛胸墙,可吹牛的內(nèi)容都是我干的我注。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼迟隅,長吁一口氣:“原來是場噩夢啊……” “哼但骨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起智袭,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤奔缠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吼野,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體校哎,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年瞳步,在試婚紗的時候發(fā)現(xiàn)自己被綠了闷哆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡单起,死狀恐怖抱怔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情馏臭,我是刑警寧澤野蝇,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站括儒,受9級特大地震影響绕沈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜帮寻,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一乍狐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧固逗,春花似錦浅蚪、人聲如沸藕帜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洽故。三九已至,卻和暖如春盗誊,著一層夾襖步出監(jiān)牢的瞬間时甚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工哈踱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荒适,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓开镣,卻偏偏與公主長得像刀诬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子邪财,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351