05-python中函數的使用,05-python函數使用

來源:互聯網
上載者:User

05-python中函數的使用,05-python函數使用

函數:就是讓程式模組化,把具有獨立功能的代碼塊當成一個整體封裝成一個函數

 

首先列印一個佛主看看:

print("                            _ooOoo_  ")print("                           o8888888o  ")print("                           88  .  88  ")print("                           (| -_- |)  ")print("                            O\\ = /O  ")print("                        ____/`---'\\____  ")print("                      .   ' \\| |// `.  ")print("                       / \\||| : |||// \\  ")print("                     / _||||| -:- |||||- \\  ")print("                       | | \\\\\\ - /// | |  ")print("                     | \\_| ''\\---/'' | |  ")print("                      \\ .-\\__ `-` ___/-. /  ")print("                   ___`. .' /--.--\\ `. . __  ")print("                ."" '< `.___\\_<|>_/___.' >'"".  ")print("               | | : `- \\`.;`\\ _ /`;.`/ - ` : | |  ")print("                 \\ \\ `-. \\_ __\\ /__ _/ .-` / /  ")print("         ======`-.____`-.___\\_____/___.-`____.-'======  ")print("                            `=---='  ")print("  ")print("         .............................................  ")print("                  佛祖鎮樓                  BUG辟易  ")print("          佛曰:  ")print("                  寫字樓裡寫字間,寫字間裡程式員;  ")print("                  程式人員寫程式,又拿程式換酒錢。  ")print("                  酒醒只在網上坐,酒醉還來網下眠;  ")print("                  酒醉酒醒日複日,網上網下年複年。  ")print("                  但願老死電腦間,不願鞠躬老闆前;  ")print("                  平治寶馬貴者趣,公交自行程式員。  ")print("                  別人笑我忒瘋癲,我笑自己命太賤;  ")print("                  不見滿街漂亮妹,哪個歸得程式員?")

那麼這個時候我們想列印很多遍佛主的話,總不能一直複製粘貼,所以我們需要定義一個列印佛主函數:

def print_fozhu():  #首先在開始定義列印佛主的函數,函數名為print_fozhu    print("                            _ooOoo_  ")    print("                           o8888888o  ")    print("                           88  .  88  ")    print("                           (| -_- |)  ")    print("                            O\\ = /O  ")    print("                        ____/`---'\\____  ")    print("                      .   ' \\| |// `.  ")    print("                       / \\||| : |||// \\  ")    print("                     / _||||| -:- |||||- \\  ")    print("                       | | \\\\\\ - /// | |  ")    print("                     | \\_| ''\\---/'' | |  ")    print("                      \\ .-\\__ `-` ___/-. /  ")    print("                   ___`. .' /--.--\\ `. . __  ")    print("                ."" '< `.___\\_<|>_/___.' >'"".  ")    print("               | | : `- \\`.;`\\ _ /`;.`/ - ` : | |  ")    print("                 \\ \\ `-. \\_ __\\ /__ _/ .-` / /  ")    print("         ======`-.____`-.___\\_____/___.-`____.-'======  ")    print("                            `=---='  ")    print("  ")    print("         .............................................  ")    print("                  佛祖鎮樓                  BUG辟易  ")    print("          佛曰:  ")    print("                  寫字樓裡寫字間,寫字間裡程式員;  ")    print("                  程式人員寫程式,又拿程式換酒錢。  ")    print("                  酒醒只在網上坐,酒醉還來網下眠;  ")    print("                  酒醉酒醒日複日,網上網下年複年。  ")    print("                  但願老死電腦間,不願鞠躬老闆前;  ")    print("                  平治寶馬貴者趣,公交自行程式員。  ")    print("                  別人笑我忒瘋癲,我笑自己命太賤;  ")    print("                  不見滿街漂亮妹,哪個歸得程式員?")print_fozhu()    #然後在下面調用print_fozhu函數print_fozhu()

帶有參數的函數

首先我們來定義一個函數來計算兩個數的總和:

def sum():  #表示定義一個函數,函數名為sum    a = 20    b = 30    sum = a+b    print("%d+%d=%d"%(a,b,sum))sum()  #在下面調動這個函數

這樣會不會有點太死板了,我們希望能夠從鍵盤輸入a和b去擷取這兩個數的總和,那麼需要怎麼做呢?

def sum(a,b):  #在上面定義搞一個函數,函數名為sum,並且攜帶兩個參數a,b,用來接收的叫做形參    sum = a+b    print("%d+%d=%d"%(a,b,sum))num1 = int(input("第1個值:"))    #input鍵盤輸入的值是字串類型,需要用int()轉換成整形num2 = int(input("第2個值:"))sum(num1,num2)  #在調用sum函數時,等於把num1和num2傳到sum()函數裡去,調用時的傳的參數叫做實參

root@test:~/codes# python3 01-帶有參數的函數-input.py
第1個值:    10
第2個值:50
10+50=60

return的作用:所謂“傳回值”,就是程式中函數完成一件事情後,最後給調用者的結果

比如:我給了我的朋友22塊錢,讓他幫我去買一包煙,然後朋友買完回來了把煙交給我,這個煙就是傳回值

其次,在擷取鍵盤輸入時,也是這種道理:

In [1]: name = input("Name:")Name:laowangIn [2]: nameOut[2]: 'laowang'  #相當於才從鍵盤擷取了一個值,然後拿給了name

那麼,我們現在來舉一個例子來說明return的作用:

def get_wendu():    #這裡定義一個擷取溫度的函數get_wendu    wendu = 22    #定義一個wendu變數    print("當前的室溫是%d"%wendu)def get_wendu_huashi():  #定義一個擷取華氏溫度的函數get_wendu_huashi    wendu = wendu + 2  #假設華氏溫度=溫度+2    print("當前的室溫(華氏)是%d"%wendu)get_wendu_huashi()  #調用剛剛定義的函數,get_wendu_huashi

讓我們看一下運行結果:
Traceback (most recent call last):
  File "02-擷取溫度.py", line 10, in <module>
    get_wendu_huashi()
  File "02-擷取溫度.py", line 7, in get_wendu_huashi
    wendu = wendu + 2
UnboundLocalError: local variable 'wendu' referenced before assignment  #這句話表示在聲明變數wendu之前就已經對其調用,定位到錯誤的地方了

讓我來解釋一下:在函數中定義的變數,只允許在當前函數中使用,在其他函數裡不能用,而且函數中不允許直接調用結果那麼意思就是在get_wendu中定義的變數wendu,到了get_wendu_huashi中卻不認識這個wendu變數

讓我們來看一下修改後的代碼:

def get_wendu():    wendu = 22    print("當前的室溫是%d"%wendu)    return wendu  #在這裡我們使用了return函數,那麼意味著我們可以把這個值、這個結果返回到調用的地方def get_wendu_huashi(wendu):  #wendu是形參,用來接收的    wendu = wendu + 2    print("當前的室溫(華氏)是%d"%wendu)result = get_wendu()  #return時需要有個容器來把結果存放起來,然後再傳入時,把這個結果給存進去get_wendu_huashi(result)  #在調用get_wendu_huashi函數時,把result這個變數作為實參給傳送到函數裡去

運行結果如下:
root@test:~/codes# python3 !$
python3 02-擷取溫度.py
當前的室溫是22
當前的室溫(華氏)是24

大功告成.....

總結:如果在一個函數中有了return,那麼就意味著這個函數可以把一個值,一個結果返回到調用的地方,return時需要有個東西把結果存放起來,然後在傳入時把這個東西存進去

 

如果一個函數想要有多個return,可以寫多個return,但是函數一旦運行到return,函數就會結束,如下:

In [1]: def test():    #定義一個test函數   ...:     a = 11     #變數a   ...:     b = 22     #變數b   ...:     return a     ...:     return b   ...: In [2]: a = test()  #調用test函數,並把它的結果賦值給aIn [3]: aOut[3]: 11In [4]: b = test()  #調用test函數,並把他的結果賦值給bIn [5]: bOut[5]: 11

那麼為什麼a和b的值是一樣的呢?我們來看一下流程:

1.定義了一個test函數

2.在test函數中定義了兩個變數a和b,並分別複製a = 11,b = 22

3.使用return返回a的值和b的值

4.調用test函數,並把它賦值給了a

5.然後開始進入函數,a = 11,b = 22,然後return a,結果賦值給了a,此時的a等於11,程式結束

6.到了b = test(),進入函數,a = 11,b = 22,然後return a,結果被賦值給了b,此時b等於11,所以a和b的結果是一樣的

為什麼呢?因為在函數中,每調用一次函數就從函數從頭開始做,可以寫多個return,但是當進入函數時,一看見return程式就會結束,所以a和b的結果是一樣的了

 

修改程式如下:

In [6]: def test():   ...:     a = 11   ...:     b = 22   ...:     return a,b   ...: In [7]: a,b = test()In [8]: print(a)11In [9]: print(b)22
函數的類型

函數可以根據有沒有參數,有沒有傳回值,可以相互結合

(1)無參數,無傳回值

(2)無參數,有傳回值

(3)有參數,無傳回值

(4)有參數,有傳回值

函數的嵌套使用

指在一個函數被調用的過程裡,又調用了一個函數,舉例說明一下:

def test1():    passdef test2():    print("-----2-1-----")    print("-----2-2-----")def test3():    print("-----3-1-----")    test2()  #在函數裡面調用test2函數    print("-----3-2-----")test3()  #調用test3函數

程式運行結果如下:
-----3-1-----
-----2-1-----
-----2-2-----
-----3-2----
def print_line():  #定義一個函數,列印40個*    print("*"*40)  def print_5_lines():  #定義一個函數,列印5行    i = 0    while i<5:        print_line()  #又簽到調用了print_line函數        i += 1print_5_lines()

程式運行結果如下:
root@test:~/codes# python3 04-函數的嵌套調用2.py *******************************************************************************************************************************************************************************************************

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.