05-python中函數的使用

来源:https://www.cnblogs.com/xiaoyafei/archive/2018/03/10/8540297.html
-Advertisement-
Play Games

函數:就是讓程式模塊化,把具有獨立功能的代碼塊當成一個整體封裝成一個函數 首先列印一個佛主看看: 那麼這個時候我們想列印很多遍佛主的話,總不能一直複製粘貼,所以我們需要定義一個列印佛主函數: 帶有參數的函數 首先我們來定義一個函數來計算兩個數的總和: 這樣會不會有點太死板了,我們希望能夠從鍵盤輸入a ...


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

 

首先列印一個佛主看看:

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:laowang

In [2]: name
Out[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函數,並把它的結果賦值給a

In [3]: a
Out[3]: 11

In [4]: b = test()  #調用test函數,並把他的結果賦值給b

In [5]: b
Out[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)
11

In [9]: print(b)
22

函數的類型

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

(1)無參數,無返回值

(2)無參數,有返回值

(3)有參數,無返回值

(4)有參數,有返回值

函數的嵌套使用

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

def test1():
    pass

def 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 += 1
print_5_lines()

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用架構圖來展現出自己對一個項目中所涉及的技術的總體思路 架構圖的維度和組成要素 架構視圖最經典的當屬4+1視圖:包含邏輯視圖、開發視圖、過程視圖、物理視圖、場景視圖 1:邏輯視圖一般針對客戶、用戶、業務人員、開發組織,主要從系統的功能元素、以及它們的介面、職責、交互維度入手。主要元素包括系統、子系 ...
  • SSH框架指的是Struts,Spring,Hibernate.其中,Struts主要用於流程式控制制;Spring的控制反轉能祈禱解耦合的作用;Hibernate主要用於數據持久化。 ...
  • Fluentd是一個日誌收集工具,有輸入端和輸出端的概念,前者主要是日誌的來源,你可以走多種來源方式,http,forward,tcp都可以,後者輸出端主要指把日誌進行持久化的過程,你可以直接把它持久化到elasticsearch里,也可以直接在控制台輸出,這看你如何配置了,更多基礎配置可以看大叔這 ...
  • Python版本:3.6.2 操作系統:Windows 作者:SmallWZQ 截至上篇隨筆《Python數據結構之四——set(集合)》,Python基礎知識也介紹好了。接下來準備乾件“大事”。 什麼“大事”呢?下麵將要介紹Python編程的核心內容之一——函數。 對於Python編程,函數的重要 ...
  • ...
  • 1、@Controller 在SpringMVC 中,控制器Controller 負責處理由DispatcherServlet 分發的請求,它把用戶請求的數據經過業務處理層處理之後封裝成一個Model ,然後再把該Model 返回給對應的View 進行展示。在SpringMVC 中提供了一個非常簡便 ...
  • 查找最大的N個元素——堆數據結構 給出序列,求出TopK大的元素,使用小頂堆,heapq模塊實現 ...
  • 第一種:點對點 第二種: 發佈者/訂閱者 啟動順序:先訂閱、再發佈 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...