Python函數的五種參數類型

2021-01-12 老羅觀社會萬象

【1】位置參數

從前面的學習的案例我們會發現一個規律:函數調用時,實參默認按位置順序進行傳遞,並且要求個數和形參完全匹配。這就是位置參數!

# 位置參數def postion_fun(a,b,c):print("a = {0},b = {1},c = {2}".format(a,b,c))postion_fun(10,59,2019)postion_fun(10,59)

案例中的函數定義一個列印接收到的三個參數值。一次調用函數時傳入三個實參,另一次調用則只傳入兩個實參。

我們看看執行的效果:

傳入三個參數的調用成功,並且實參對應函數形參的位置被列印出來;傳入兩個參數的調用失敗,Python彈出「缺少一個參數c」的報錯信息。【2】默認參數

針對位置參數少傳一個參數報錯的問題,我們是否可以設置一個默認的值呢?這樣在函數調用時不用傳入該參數時也不會報錯。這就是「默認參數」。

# 默認參數def default_fun(a,b,c = 2019):print("a = {0},b = {1},c = {2}".format(a,b,c))default_fun(10,59,"職說職語")default_fun(10,59)

案例中的函數定義一個列印接收到的三個參數值,其中一個參數設置了默認值。一次調用傳入三個參數,另一次調用傳入兩個參數。

看到執行結果我們看到兩次調用都是成功的。

函數調用傳入三個參數時,按實參與形參的位置對應關係列印三個實參的值;函數調用傳入兩個參數時,按實參與形參的位置對應關係列印兩個實參的值和函數定義的一個默認形參值。【注】函數定義默認參數時,默認參數的位置必須在最後,否則報錯。大家可以自己去測試下。

【3】命名參數

針對位置參數與默認參數調用必須實參與形成位置對應的要求,我們是否可以在調用時制定形參的具體實參值,來規避違背這種要求帶來的問題呢?

【結論】採用指定形參的具體實參值是可以增加函數調用的靈活性。

postion_fun(c = 10,b = 59, a = 2019)

【4】可變參數

上面三種參數類型中單個參數都是針對單個的值。如果函數的單個參數中包含多個值(元組、字典等)該如何處理呢?

Python中引入了「可變數量的參數」這個概念:

1、元組參數:

【結論】:在函數定義時,用*param(一顆星號)表示收集多個參數值組成一個元組。

2、字典參數:

# 字典參數def tuple_fun2(a,b,**c): print("a = {0},b = {1},c = {2}".format(a,b,c))tuple_fun2(10,59,name="職說職語",job="自由工作者")

【結論】:在函數定義時,用**param(兩顆星號)表示收集多個參數值組成一個字典。

3、元組與字典參數融合:

# 元組與字典參數def tuple_fun3(a,b,*c,**d): print("a = {0},b = {1},c = {2},d = {3}".format(a,b,c,d))tuple_fun3(10,59,2019,"職說職語",name="職說職語",job="自由工作者")

【結論】兩種參數都可以出現在一個函數中,並且安裝實參與形參的對應位置進行結果組裝。

【5】強制命名參數

最後針對可變參數,我們問最後一個問題:可變參數在函數定義時是否可以放置任意位置呢?函數調用時是否有什麼要求呢?

# 強制命名參數def tuple_fun4(*a,b,c): print("a = {0},b = {1},c = {2}".format(a,b,c))tuple_fun4(10,59,2019,"職說職語")tuple_fun4(10,59,b = 2019,c = "職說職語")tuple_fun4(10,b = 2019,c = "職說職語")

定義函數時把元組參數放到最前面,那調用函數時,該參數默認是收集所有傳入的實參後組成元組,如果要是後面兩個參數有值並保證函數調用正常,則必須採用強制命名參數方式制定實參傳入形參的值。

【問題】兩個可變參數是否可以都放置前面呢?大家可以去測試下。

相關焦點

  • python數據類型總結——列表
    python用列表或元組來幫助我們。python列表一系列元素組成一個集合,可能通過索引,對每個元素進行訪問。這種數據類型統稱為序列。在python中,字符串就是一種序列。python列表常用函數或方法python提供了一系列函數或方法,幫助我們完成對列表的操作。這些方法,大部分都是可以用途其它類型的序列的。如 + 或 * 一樣。len用於獲取列表的元素個數,max或min用於取出最大值可最小值。
  • python的內置函數:int()轉換成整型
    前言在Java中有強制類型轉換,我們可以利用Integer.parseInt()將一個對象轉換成int類型。在python中是利用內置函數int()來將一個對象轉換成整型。python的內置函數int的使用1.內置函數int()語法classint(x,base=10),其中x為一個字符串或數字,base來表示x是以什麼進位的數據來表示的。x數字參數可以是整數、浮點數(小數點表示和指數e表示皆可), 字符串參數僅能包含在指定進位下所涵蓋的字符,該參數可省略。
  • Python數據類型串講(中)
    python中的內建序列有6種:列表、元祖、字符串、Unicode字符串、xrange對象、buffer對象,其中列表和元祖是最常見的序列,應重點掌握。字符串在上一篇文章中已簡單介紹,下面將以字符串為例,對序列的通用操作進行詳講。
  • Python每日3題-為什麼函數名字可以當做參數用?
    [Easy] 為什麼函數名字可以當做參數用? 思考30秒再往下翻...[Normal] 函數裝飾器有什麼作用?裝飾器的返回值也是一個函數的對象,它經常用於有切面需求的場景。比如:插入日誌,性能測試,事務處理,緩存。權限的校驗等場景,有了裝飾器就可以抽離出大量的與函數功能本身無關的雷同代碼並發並繼續使用。 [Hard] 生成器,迭代器的區別? 思考30秒再往下翻...
  • Python函數參數的使用方法
    但對函數參數的傳遞沒有詳細討論,本文主要討論函數參數的傳遞。函數中的參數起到了傳遞數據的作用,函數調用者可以通過函數參數把函數內部需要的數據從外部傳遞過去。例如下面的代碼定義了函數summation,它有一個參數number,函數需要這個參數來計算自然數的累加和。調用者調用函數時,需要傳入一個自然數進去。
  • python基礎課程 第5章 奇妙的內建函數
    今天我們來講講 python 的常用內建函數,以便於大家在日常編程過程中遇到類似的場景可以直接拿來使用,不用再重複自己了。python 內建函數(python自帶的函數) 數量加起來大概有70多個,今天我們主要講常用的一些,至於更多的內容可以在以後的基礎教程裡慢慢學到。
  • Python使用ctypes模塊調用DLL函數之複數數組的參數傳遞
    這兒就涉及到了如何將C語言中的複數數組(Complex array)類型與Python中的數據類型進行交互的問題。在Python語言中,可以使用ctypes模塊調用其它如C++語言編寫的動態連結庫DLL文件中的函數,前面多篇文章中已經講了傳遞數值/指針/字符串參數、傳遞結構體參數、傳遞普通數組類型的例子,大家可以回看一下,這樣可以更好的理解本次要講的內容。
  • Python之list列表數據類型講解
    前言在python中,list列表數據類型其實就是一個容器,可以放置大量元素的集合。同時,list列表也有很多特點和使用場景,本文主要講解list列表的函數方法。概念list列表是一個集合,一個容器,同Java語言中的數組是一樣的,唯一的不同之處在於,Java中的數組類型只能放置同一種數據類型,而Python中的列表可以放置不同的數據類型。
  • Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞
    前面兩篇已經講了傳遞數值/指針/字符串參數、傳遞結構體參數的例子,大家可以回看一下,這樣可以更好的理解本次要講的內容。詳細細節請參考:python使用ctypes模塊調用DLL函數之傳遞數值、指針與字符串參數、Python使用ctypes模塊調用DLL函數之傳遞結構體參數這次講一下在Python中使用ctypes模塊調用DLL中的庫函數傳遞數組參數的情況。
  • python動態添加類對象成員:變量、函數
    給類對象動態添加方法/函數注意:初學者在理解以下內容之前,需清楚python類中 self 參數的含義和作用,可自行搜索查閱:Python中self的用法!說明:為p對象動態增加方法時,Python 不會自動將調用者自動綁定到類方法的第一個參數self(即使將第一個參數命名為 self 也沒用)。
  • Python基礎教程(一) - 函數和函數式編程
    前面使用過很多print()來進行列印,這是python提供的內建函數,你也可以自己創建函數,這叫做用戶自定義函數。創建函數你可以定義一個由自己想要功能的函數,用def語句來創建,標題行由def關鍵字,函數的名字,以及參數的集合(如果有的話)組成。
  • python教程之python數學運算
    存儲數據變量#兩個變量交換值,通過第三個參數實現print('兩個變量交換值,通過第三個參數實現'); #第一種方法是通過第三個參數實現x=5;#變量賦值y=11; #變量賦值print('交換前',x,y);temp=x;x=y;y=temp;print
  • Python零基礎入門教程,如何使用lambda、filter和map函數?
    大綱函數類型定義及特性lambda函數定義及使用filter函數定義及使用map函數定義及使用引入函數類型概念函數類型定義:python中任意一個函數都有數據類型,這種數據類型是function(函數類型)
  • Python基礎教程(一) - 快速入門
    /usr/bin/python為Linux系統下Python解釋器的路徑,通常python解釋器的路徑安裝在/usr/local/bin或/usr/bin目錄下。Python是動態類型語言,不需要預先生命變量類型。數字&字符串Python支持五種基本數字類型,其中有三種整形類型。
  • python高階函數:map、filter、reduce的替代品
    什麼是高階函數?高階函數是一種將函數作為參數,或者把函數作為結果返回的函數,map函數、sorted函數就是高階函數的典型例子。map函數在小編以前的文章中做過相應的知識分享。sorted函數是python的內置函數,它的可選參數key用於提供一個函數,它可以將函數應用到各個元素上進行排序。
  • Python中的函數參數
    # 必需參數# 默認參數# 關鍵字參數# 不定長參數# 必需參數:必需參數須以正確的順序傳入函數def must(m):# 調用時必須傳入一個參數print("必須傳入參數",m)return# 調用函數,不傳入參數會報錯print(must())
  • 利用python計算函數與x軸之間的面積
    用數學表達式表示出來就是:也就是求解任意一個函數的絕對值與x軸之間構成的面積,我們以函數sin(x)為例(因為函數sin(x)便於對計算結果進行檢驗),如圖所示:我們用積分的定義來計算,積分就是將函數分成無數的小段,然後對每一小段進行求和處理。
  • Python每天一分鐘:lambda表達式 (匿名函數)及用法詳解
    lambda表達式介紹python中有一種靈活,便捷的且具有函數功能的表達式:lambda表達式!在 lambda 關鍵字之後、冒號左邊為參數列表,可不帶參數,也可有多個參數。若有多個參數,則參數間用逗號隔開,冒號右邊為 lambda 表達式的返回值。
  • 打基礎一定要吃透這12類 Python 內置函數
    內置函數就是python給你提供的, 拿來直接用的函數,比如print.,input等。截止到python版本3.6.2 python一共提供了68個內置函數,我將它們分成 12 類,方便你學習。1. 和數字相關1.
  • 寫Python 代碼不可不知的函數式編程技術
    頭等函數在 Python 中,函數是「頭等公民」(first-class)。也就是說,函數與其他數據類型(如 int)處於平等地位。因而,我們可以將函數賦值給變量,也可以將其作為參數傳入其他函數,將它們存儲在其他數據結構(如 dicts)中,並將它們作為其他函數的返回值。