最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中的函數參數傳遞問題

 更新時間:2023年01月04日 09:30:43   作者:ζ小菜雞  
這篇文章主要介紹了Python中的函數參數傳遞問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一、前言

在調用函數時,大多數情況下,主調函數和被調函用之間有數據傳遞關系,這就是有參數的函數形式。

函數參數的作用是傳遞數據給函數使用,函數利用接收的數據進行具體的操作處理。

函數參數在定義函數時放在函數名稱后面的一對小括號中,如圖所示:

二、了解形式參數和實際參數

在使用函數時,經常會用到形式參數(形參)和實際參數(實參)。

兩者都叫做參數二者之間的區(qū)別先通過形式參數和實際參數的作用來進行講解,再通過比喻進行理解。

1.通過作用理解

形式傳參和實際參數在作用上的區(qū)別如下:

  • 形式傳參:在定義函數時,函數名后面括號中的參數為“形式參數”,也稱形參。
  • 實際參數:在調用一個函數時,函數名后面括號中的參數為“實際參數”。也就是將函數的調用者提供給函數的參數稱為實際參數,也稱為實參。

根據實參的類型不同,可以分為將實參的值傳遞個形參,和將實參的引用傳遞給形參兩種情況。

  • 當實參為不可變對象時,進行的是值傳遞
  • 當實參為可變對象時,進行的是引用傳遞

值傳遞和引用傳遞的基本區(qū)別:

  • 進行值傳遞后,改變形參的值,實參的值不變
  • 進行引用傳遞后,改變形參的值,實參的值也一同改變

實例:

# 定義函數
def demo(obj):
    print("原值:", obj)
    obj += obj


# 調用函數
print("==========值傳遞==========")
mot = "唯有在被追趕的時候,你才能真正地奔跑"
print("函數調用前:", mot)
demo(mot)  # 采用不可變對象-字符串
print("函數調用后:", mot)

print("==========引用傳遞==========")
list1 = ["小白", "小名", "小紅"]
print("函數調用前:", list1)
demo(list1)  # 采用可變對象-列表
print("函數調用后:", list1)

運行結果如下:

2.通過比喻來理解形參和實參

函數定義時參數列表中的參數就是形參,而函數調用時傳遞進來的參數就是實參,就像劇本選主角一樣,劇本的角色相對于形參,而演角色的演員就相對于實參。

三、位置參數

位置參數也稱必備參數,必須按照正確的順序傳到函數中。即調用時的數量和位置必須和定義時是一樣的。

1.數量必須與定義時一致

在調用函數時,指定的實參數量必須與形參一致,否則將拋出TypeError異常,提示缺少必要的位置參數。

例如:定義一個函數def fun_bmi(person, height, weight),該函數中有3個參數,但調用時只傳兩個參數,如下代碼所示:

def fun_bmi(person, height, weight):
    """
    功能:根據身高和體重計算BMI指數
    :param person: 姓名
    :param height: 身高,單位:米
    :param weight: 體重,單位:千克
    """
    print(person + "的身高:" + str(height) + "米\t 體重:" + str(weight) + "千克")
    bmi = weight / (height * height)  # 用于計算BMI指數,公式為“體重/身高的平方”
    print(person + "的BMI指數為:" + str(bmi))

    # 判斷身材是否合理
    if bmi < 18.5:
        print("您的體重過輕")
    if 18.5 <= bmi < 24.9:
        print("正常范圍,注意保持")
    if 24.9 <= bmi < 29.9:
        print("您的體重過重")
    if bmi > 29.9:
        print("肥胖")


fun_bmi("路人甲", 183)

運行結果如下:

如上圖所示,拋出TypeError,具體意思是“fun_bmi()方法缺少一個必要的位置參數weight”。

2.位置必須與定義時一致

在調用函數時,指定的實參位置與形參的位置一致,否則將產生一下兩個結果:

  • 拋出TypeError異常產
  • 生結果與預期不符的問題

拋出異常的情況主要是因為在調用函數時,如果指定的實參與形參的位置不一致,但是他們的類型一致,那么就不會拋出異常,而是產生結果與預期不符的問題。

例如,下列代碼:

def fun_bmi(person, height, weight):
    """
    功能:根據身高和體重計算BMI指數
    :param person: 姓名
    :param height: 身高,單位:米
    :param weight: 體重,單位:千克
    """
    print(person + "的身高:" + str(height) + "米\t 體重:" + str(weight) + "千克")
    bmi = weight / (height * height)  # 用于計算BMI指數,公式為“體重/身高的平方”
    print(person + "的BMI指數為:" + str(bmi))

    # 判斷身材是否合理
    if bmi < 18.5:
        print("您的體重過輕")
    if 18.5 <= bmi < 24.9:
        print("正常范圍,注意保持")
    if 24.9 <= bmi < 29.9:
        print("您的體重過重")
    if bmi > 29.9:
        print("肥胖")
        
fun_bmi("路人甲", 60, 183)

運行結果如下:


 

函數調用后,沒有拋出異常,但是從結果看,產生結果與預期結果不一致。

四、關鍵字參數

關鍵字傳參是指使用形參的名字來確定輸入的參數。通過該方式指定實參時,不需要與形參位置一致,只要參數名稱寫正確即可。

例如:調用def fun_bmi(person, height, weight)函數,通過關鍵字傳參,代碼如下:

fun_bmi(height=1.83, weight=60, person="路人甲")

調用函數,將顯示如下結果:

從上面結果可以看出,雖然指定實際傳參時,順序與函數定義時不一致,但是運行結果與預期結果是一致的。

五、為參數設置默認值

調用函數時,如果沒有指定某個參數將拋出異常,即在定義函數時,直接指定形式參數的默認值。

這樣,當沒有傳入參數時,則直接使用定義函數時設置的默認值。

語法格式如下:

def functionname(...,[parameter1 = defaultvalue1]):[functionbody]

參數說明:

  • functionname:函數名稱,在調用時使用
  • parameter1 = defaultvalue1:可選參數,用于指定向函數中傳遞的出納室,并且為該參數設置默認值為defaultvalue1
  • functionbody:可選參數,用于指定函數體,即該函數被調用后,要執(zhí)行的功能代碼

注意:在定義函數時,指定默認的形參必須在所有參數的最后,否則將產生語法錯誤。

使用可變對象作為函數參數的默認值時,多次調用可能會導致意料之外的情況,例如,編寫一個名稱為demo()的函數,并為其設置一個帶默認值的參數,代碼如下:

def demo(obj=[]):
    print("obj的值:", obj)
    obj.append(1)

調用demo()函數,代碼如下:

demo() # 調用函數

將顯示以下結果:

連續(xù)兩次調用,并不指定實際參數,代碼如下:

demo() # 調用函數
demo() # 調用函數

將顯示以下結果:


從上面結果看,這顯然不是我們想要的結果,為了防止出現(xiàn)這種情況,最好使用Nome作為可變對象的默認值,這時還需要代碼檢查。修改后的代碼如下:

def demo(obj=None):  # 定義一個函數
    if obj == None:  # 判斷是否為空
        obj = []
    print("obj的值:", obj)  # 輸出obj值
    obj.append(1)  # 連續(xù)調用并輸出

這時在連續(xù)兩次調用函數demo()函數,將顯示以下運行結果:

六、可變參數

定義可變參,主要有兩個形式:

  • *parameter
  • **parameter

1.*parameter

這種形式表示接收任意多個實際參數并將放到一個元組中。例如,定義一個函數,讓其可以接收任意多個實際參數,代碼如下:

def printplayer(*name):  # 定義輸出我喜歡的NBA球員的函數
    print("\n我喜歡的NBA球員有:")
    for item in name:
        print(item)  # 輸出球員名稱

調用3次上面的函數,分別指定不同個數的實際參數,代碼如下:

printplayer("小紅")
printplayer("小紅", "小白")
printplayer("小紅", "小白", "小明")

執(zhí)行結果如下:

2.**parameter

這個形式表示接收任意多個顯式賦值的實際參數,并將其放到一個字典中。例如,定義一個函數,讓其可以接收任意多個顯式賦值的實際參數,代碼如下:

def printsign(**sign):  # 定義輸出姓名和綽號的函數
    print()  # 輸出一個空行
    for key, value in sign.items():  # 遍歷字典
        print("[" + key + "]的綽號是:" + value)  # 輸出組合獲得信息

調用兩次printsign()函數,代碼如下:

printsign(小紅="妖精", 小明="大聰明")
printsign(小白="菜雞", 小李="不高興", 小張="沒頭腦")

執(zhí)行結果如下:


如果想要使用一個已經存在的字典作為函數的可變參數,可以在字典的名稱前加“**”。例如下面代碼:

dict1 = {"小白": "菜雞", "小李": "不高興", "小張": "沒頭腦"}  # 定義一個字典
printsign(**dict1)  # 通過字典指定函數的可變參

執(zhí)行結果如下:

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Django3.0 異步通信初體驗(小結)

    Django3.0 異步通信初體驗(小結)

    這篇文章主要介紹了Django3.0 異步通信初體驗,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Python Matplotlib庫安裝與基本作圖示例

    Python Matplotlib庫安裝與基本作圖示例

    這篇文章主要介紹了Python Matplotlib庫安裝與基本作圖,簡單分析了Python使用pip命令安裝Matplotlib庫及繪制三角函數曲線的相關操作技巧,需要的朋友可以參考下
    2019-01-01
  • Python數據分析之Numpy庫的使用詳解

    Python數據分析之Numpy庫的使用詳解

    NumPy(Numerical Python)是Python的一種開源的數值計算擴展。這種工具可用來存儲和處理大型矩陣,比Python自身的嵌套列表結構要高效的多(該結構也可以用來表示矩陣(matrix)),支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫
    2021-11-11
  • Python 通過正則表達式快速獲取電影的下載地址

    Python 通過正則表達式快速獲取電影的下載地址

    這篇文章主要介紹了Python 通過正則表達式快速獲取電影的下載地址,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 使用Python的Twisted框架編寫非阻塞程序的代碼示例

    使用Python的Twisted框架編寫非阻塞程序的代碼示例

    Twisted是基于異步模式的開發(fā)框架,因而利用Twisted進行非阻塞編程自然也是必會的用法,下面我們就來一起看一下使用Python的Twisted框架編寫非阻塞程序的代碼示例:
    2016-05-05
  • 詳解如何通過Python制作一個密碼生成器

    詳解如何通過Python制作一個密碼生成器

    定期更換密碼是一種非常重要的安全措施,這種做法可以有效地保護你的賬戶和個人信息不受黑客和網絡攻擊者的侵害。所以本文就來用Python制作一個密碼生成器吧
    2023-05-05
  • Python數學建模PuLP庫線性規(guī)劃實際案例編程詳解

    Python數學建模PuLP庫線性規(guī)劃實際案例編程詳解

    本節(jié)以一個實際數學建模案例,來為大家講解PuLP求解線性規(guī)劃問題的建模與編程。來鞏固加深大家對Python數學建模PuLP庫線性規(guī)劃的運用理解
    2021-10-10
  • pycharm 配置遠程解釋器的方法

    pycharm 配置遠程解釋器的方法

    今天小編就為大家分享一篇pycharm 配置遠程解釋器的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python Pandas處理csv文件常用示例

    Python Pandas處理csv文件常用示例

    Pandas是一個非常強大的數據操作python包,支持各種數據格式,包括CSV文件,本文就來介紹一下Python Pandas處理csv文件常用示例,感興趣的可以了解一下
    2023-12-12
  • Python 實現(xiàn)兩個服務器之間文件的上傳方法

    Python 實現(xiàn)兩個服務器之間文件的上傳方法

    今天小編就為大家分享一篇Python 實現(xiàn)兩個服務器之間文件的上傳方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02

最新評論

彩票| 洛宁县| 彝良县| 甘肃省| 全州县| 临漳县| 阜城县| 文登市| 蓬安县| 峨边| 海盐县| 池州市| 兰州市| 吐鲁番市| 南岸区| 龙里县| 连城县| 郑州市| 惠东县| 永兴县| 铜鼓县| 施甸县| 八宿县| 宜宾市| 天津市| 双峰县| 伊金霍洛旗| 卢湾区| 南宫市| 郓城县| 乌审旗| 桐梓县| 南平市| 阜康市| 靖安县| 泊头市| 丰都县| 四平市| 北流市| 丹巴县| 南城县|