11 - 函數(shù)

1 . 函數(shù)的概念

如果在開發(fā)程序時漱办,某塊代碼需要多次調(diào)用或者復(fù)用性高,為了提高編寫的效率以及代碼的重用婉烟,把具有獨立功能的代碼塊組織為一個小模塊娩井,這就是函數(shù)

2 . 函數(shù)的定義和調(diào)用

  • 定義函數(shù)的格式:
//使用def定義函數(shù)
    def 函數(shù)名():
        代碼

demo:

def print_triangle():
    print("*")
    print("*"*2)
    print("*"*3)
    print("*"*4)
  • 函數(shù)的調(diào)用格式:
函數(shù)名()

demo:

//定義完函數(shù)后,函數(shù)是不會自動執(zhí)行的似袁,需要手動調(diào)用
print_triangle()

3 . 函數(shù)的類型

3.1 無參數(shù)洞辣,無返回值

使用場景:打印提示類似的功能

def test():
    print("====")
test()  #調(diào)用之后便會打印====
3.2 無參數(shù),有返回值的函數(shù)

使用場景:保存數(shù)據(jù)

def getsum():
    return  100
temp = getsum()
print("當前數(shù)值為:%d"%(temp)) #當前數(shù)值為:100

3.3有參數(shù)昙衅,無返回值

使用場景:以需求為主

//定義帶有參數(shù)的函數(shù)
def test(a,b): 
     print("%d"%(a + b))
#調(diào)用帶有參數(shù)的函數(shù)(調(diào)用時扬霜,需要在小括號中,傳遞數(shù)據(jù))
test(11,123) #134
gif顯示.gif
3.4 有參數(shù)而涉,有返回值

使用場景:像數(shù)據(jù)處理并需要結(jié)果的應(yīng)用

** 就是程序中函數(shù)完成一件事情后著瓶,最后給調(diào)用者的結(jié)果**
demo1:

#定義函數(shù)
def sum(a,b):
    return  a + b
#調(diào)用函數(shù),順便保存函數(shù)的返回值,再打印
print("sum = %d"%(sum(11,11))) #sum = 22

demo2:求和以及求平均值

def sumNum(num):
    result = 0
    i = 1
    while i<= num:
        result = result + i
        i+=1
    return result

r = sumNum(100)
print("1-50的和為:%d"%(r)) #1-50的和為:5050

def sum3Num(a,b,c):
    return a +b + c
def aveeage3Num(a,b,c):
    sumResult = sum3Num(a,b,c)
    result = sumResult /3
    return  result
r = aveeage3Num(11,12,13)
print("三個數(shù)的平均值:%d"%(r)) #三個數(shù)的平均值:12

函數(shù)的嵌套使用(打印5行-----)

  • 笨方式demo
def print_line():
    print("-"*5)
def print_5_line():
    print("-" * 5)
    print("-" * 5)
    print("-" * 5)
    print("-" * 5)
    print("-" * 5)
print_5_line()

  • 優(yōu)雅方式

def print_line():
    print("-"*5)
def print_5_line():
     i= 0
     while i < 5:
       print_line()
       i += 1
print_5_line()

** 小總結(jié) **

  • 定義時小括號中的參數(shù)啼县,用來接收參數(shù)用的材原,稱為 “形參”
  • 調(diào)用時小括號中的參數(shù),用來傳遞給函數(shù)用的季眷,稱為 “實參”

4. 局部變量與全局變量

4.1 局部變量
  • 局部變量:定義在函數(shù)內(nèi)部的變量
  • 部變量的作用:臨時保存數(shù)據(jù)需要在函數(shù)中定義變量來進行存儲
  • 不同的函數(shù)余蟹,可以定義相同的名字的局部變量,但是各用個的不會產(chǎn)生影響
4.2 全局變量
  • 在函數(shù)外邊定義的變量

  • 全局變量能夠在所有的函數(shù)中進行訪問

  • 如果在函數(shù)中修改全局變量瘟裸,那么就需要使用global進行聲明客叉,否則出錯

  • 如果全局變量的名字和局部變量的名字相同,那么使用的是局部變量的话告,小技巧強龍不壓地頭蛇

  • 在函數(shù)中不使用global聲明全局變量時不能修改全局變量的本質(zhì)是不能修改全局變量的指向兼搏,即不能將全局變量指向新的數(shù)據(jù)。

  • 對于不可變類型的全局變量來說沙郭,因其指向的數(shù)據(jù)不能修改佛呻,所以不使用global時無法修改全局變量。

  • 對于可變類型的全局變量來說病线,因其指向的數(shù)據(jù)可以修改吓著,所以不使用global時也可修改全局變量。

demo

aa = 10
def test1():
    print(aa)
def test2():
    print(aa)
test1() 
test2()
運行結(jié)果:
10
10

** 修改全局變量**

aa = 10
def test1():
    aa = 100
    print('test1修改前:aa = %d'%(aa))
    global  aa
    aa = 111
    print('test1修改后:aa = %d' % (aa))

def test2():

    print('test2:aa = %d' % (aa))
test1()
test2()

打印結(jié)果:

Snip20170617_2.png

5. 遞歸函數(shù)

5.1 什么是遞歸函數(shù)

如果一個函數(shù)在內(nèi)部不調(diào)用其它的函數(shù)送挑,而是自己本身的話绑莺,這個函數(shù)就是遞歸函數(shù)。

  • 計算階乘n! = 1 * 2 * 3 * ... * n
    方式一(使用while方式):
def sumNumber(num):
    i = 1
    result = 1
    while i<= num:
        result *=i
        i+=1
    return result

result = sumNumber(4)
print(result)

階乘的規(guī)律

1! = 1
2! = 2 × 1 = 2 × 1!
3! = 3 × 2 × 1 = 3 × 2!
4! = 4 × 3 × 2 × 1 = 4 × 3!
...
n! = n × (n-1)!

方式二(使用遞歸方式):

def sumNumber1(num):
    if num >1:
        result = num * sumNumber1(num -1)
    else:
        result = 1
    return  result
result1 = sumNumber1(4)
print(result1) #24


6. 匿名函數(shù)

6.1 什么是匿名函數(shù)
  • lambda關(guān)鍵詞能創(chuàng)建小型匿名函數(shù),這種函數(shù)省略了用def聲明函數(shù)的標準步驟

  • lambda函數(shù)能接收任何數(shù)量的參數(shù)但只能返回一個表達式的值

  • 匿名函數(shù)不能直接調(diào)用print惕耕,因為lambda需要一個表達式

6.2語法
    lambda [arg1 [,arg2,.....argn]]:expression
6.3 demo
#函數(shù)作為參數(shù)傳遞
def fun(a,b,c):
    print("a= %d"%a)
    print("a= %d" %b)
    print("result = %d"%c(a,b))
f = fun(5,2,lambda x,y:x+y)
#作為內(nèi)置函數(shù)的參數(shù)
student = [
    {"name":"zhangsan", "age":18},
    {"name":"lisi", "age":19},
    {"name":"wangwu", "age":17}
            ]
# 按name排序:
student.sort(key = lambda x:x['name'])

print(student)

# 按age排序:
student.sort(key = lambda x:x['age'])
print(student)

打印結(jié)果:


Snip20170617_5.png

7. 函數(shù)使用注意事項

7.1 自定義函數(shù)

  • 無參數(shù)纺裁、無返回值
 def 函數(shù)名():
        語句
  • 無參數(shù)、有返回值
    def 函數(shù)名():
        語句
        return 需要返回的數(shù)值

注意:

一個函數(shù)到底有沒有返回值,就看有沒有return欺缘,因為只有return才可以返回數(shù)據(jù)栋豫。
在開發(fā)中往往根據(jù)需求來設(shè)計函數(shù)需不需要返回值。
函數(shù)中谚殊,可以有多個return語句丧鸯,但是只要執(zhí)行到一個return語句,那么就意味著這個函數(shù)的調(diào)用完成嫩絮。

  • 有參數(shù)丛肢、無返回值
   def 函數(shù)名(形參列表):
        語句

注意:
在調(diào)用函數(shù)時,如果需要把一些數(shù)據(jù)一起傳遞過去絮记,被調(diào)用函數(shù)就需要用參數(shù)來接收
參數(shù)列表中變量的個數(shù)根據(jù)實際傳遞的數(shù)據(jù)的多少來確定

  • 有參數(shù)摔踱、有返回值
    def 函數(shù)名(形參列表):
        語句
        return 需要返回的數(shù)值

7.2 調(diào)用函數(shù)

  • 格式
函數(shù)名(實參)
  • 調(diào)用時,到底寫不寫 實參
  • 如果在定義時有形參怨愤,那么在調(diào)用的時候就應(yīng)該傳遞參數(shù)
  • 調(diào)用時,實參的個數(shù)和先后順序應(yīng)該和定義函數(shù)中要求的一致
  • 如果調(diào)用的函數(shù)有返回值蛹批,那么就可以用一個變量來進行保存這個值

7.3 作用域

  • 局部變量:在一個函數(shù)中定義的變量撰洗,只能在本函數(shù)中用
  • 全局變量:在函數(shù)外定義的變量,可以在所有的函數(shù)中使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腐芍,一起剝皮案震驚了整個濱河市差导,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猪勇,老刑警劉巖设褐,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泣刹,居然都是意外死亡助析,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門椅您,熙熙樓的掌柜王于貴愁眉苦臉地迎上來外冀,“玉大人,你說我怎么就攤上這事掀泳⊙┧恚” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵员舵,是天一觀的道長脑沿。 經(jīng)常有香客問我,道長马僻,這世上最難降的妖魔是什么庄拇? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮巫玻,結(jié)果婚禮上丛忆,老公的妹妹穿的比我還像新娘祠汇。我一直安慰自己,他們只是感情好熄诡,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布可很。 她就那樣靜靜地躺著,像睡著了一般凰浮。 火紅的嫁衣襯著肌膚如雪我抠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天袜茧,我揣著相機與錄音菜拓,去河邊找鬼。 笑死笛厦,一個胖子當著我的面吹牛纳鼎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播裳凸,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼贱鄙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了姨谷?” 一聲冷哼從身側(cè)響起逗宁,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎梦湘,沒想到半個月后瞎颗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡捌议,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年哼拔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禁灼。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡管挟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弄捕,到底是詐尸還是另有隱情僻孝,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布守谓,位于F島的核電站穿铆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏斋荞。R本人自食惡果不足惜荞雏,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凤优,春花似錦悦陋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至棍辕,卻和暖如春暮现,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背楚昭。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工栖袋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抚太。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓塘幅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親凭舶。 傳聞我的和親對象是個殘疾皇子晌块,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

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