吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python 函數參數分類

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-10-21 10:45 ? 次閱讀

今天給大家分享一下自己整理的一篇 Python 參數的內容,內容非常的干,全文通過案例的形式來理解知識點,自認為比網上 80% 的文章講的都要明白,如果你是入門不久的 python 新手,相信本篇文章應該對你會有不小的幫助。

接下來是正文。

1. 參數分類

函數,在定義的時候,可以有參數的,也可以沒有參數。

從函數定義的角度來看,參數可以分為兩種:

  1. 必選參數:調用函數時必須要指定的參數,在定義時沒有等號
  2. 可選參數:也叫默認參數,調用函數時可以指定也可以不指定,不指定就默認的參數值來。

例如下面的代碼中,a 和 b 屬于必選參數, c 和 d 屬于可選參數

def func(a,b,c=0, d=1):
    pass

從函數調用的角度來看,參數可以分為兩種:

  1. 關鍵字參數:調用時,使用 key=value 形式傳參的,這樣傳遞參數就可以不按定義順序來。
  2. 位置參數:調用時,不使用關鍵字參數的 key-value 形式傳參,這樣傳參要注意按照函數定義時參數的順序來。
def func(a,b,c=0, d=1):
    pass

  # 關鍵字參數傳參方法
func(a=10, c=30, b=20, d=40)

  # 位置參數傳參方法
func(10, 20, 30, 40)

最后還有一種非常特殊的參數,叫做可變參數。

意思是參數個數可變,可以是 0 個或者任意個,但是傳參時不能指定參數名,通常使用 *args**kw 來表示:

  • *args:接收到的所有按照位置參數方式傳遞進來的參數,是一個元組類型
  • **kw :接收到的所有按照關鍵字參數方式傳遞進來的參數,是一個字典類型
def func(*args, **kw):
    print(args)
    print(kw)

func(10, 20, c=20, d=40)

輸出如下

(10, 20)
{'c': 20, 'd': 40}

2. 十一個案例

案例一 :在下面這個函數中, a 是必選參數,是必須要指定的

>> > def demo_func(a):
...     print(a)
... 
 >> > demo_func(10) 
10
 >> > demo_func()  # 不指定會報錯
Traceback (most recent call last):
  File "< stdin >", line 1, in < module >
TypeError: demo_func() missing 1 required positional argument: 'a'

案例二 :在下面這個函數中,b 是可選參數(默認參數),可以指定也可以不指定,不指定的話,默認為10

>> > def demo_func(b=10):
...     print(b)
... 
 >> > demo_func(20)
20
 >> > demo_func()
10

案例三 :在下面這個函數中, name 和 age 都是必選參數,在調用指定參數時,如果不使用關鍵字參數方式傳參,需要注意順序

>> > def print_profile(name, age):
...     return f"我的名字叫{name},今年{age}歲了"
...
 >> > print_profile("iswbm", 27)
'我的名字叫iswbm,今年27歲了'

如果參數太多,你不想太花精力去注意順序,可以使用關鍵字參數方式傳參,在指定參數時附上參數名,比如這樣:

>> > print_profile(age=27, name="iswbm")
'我的名字叫iswbm,今年27歲了'

案例四 :在下面這個函數中,args 參數和上面的參數名不太一樣,在它前面有一個 *,這就表明了它是一個可變參數,可以接收任意個數的不指定參數名的參數。

>> > def demo_func(*args):
...     print(args)
... 
 >> > 
 >> > demo_func(10, 20, 30)
(10, 20, 30)

案例五 :在下面這個函數中,kw 參數和上面的 *args 還多了一個 * ,總共兩個 ** ,這個意思是 kw 是一個可變關鍵字參數,可以接收任意個數的帶參數名的參數。

>> > def demo_func(**kw):
...     print(kw)
... 
 >> > demo_func(a=10, b=20, c=30)
{'a': 10, 'b': 20, 'c': 30}

案例六 :在定義時,必選參數一定要在可選參數的前面,不然運行時會報錯

>> > def demo_func(a=1, b):
...     print(a, b)
... 
  File "< stdin >", line 1
SyntaxError: non-default argument follows default argument
 >> >
 >> > def demo_func(a, b=1):
...     print(a, b)
... 
 >> >

案例七 :在定義時,可變位置參數一定要在可變關鍵字參數前面,不然運行時也會報錯

>> > def demo_func(**kw, *args):
  File "< stdin >", line 1
    def demo_func(**kw, *args):
                        ^
SyntaxError: invalid syntax
 >> > 
 >> > def demo_func(*args, **kw):
...     print(args, kw)
... 
 >> >

案例八 :可變位置參數可以放在必選參數前面,但是在調用時,必選參數必須要指定參數名來傳入,否則會報錯

>> > def demo_func(*args, b):
...     print(args)
...     print(b)
... 
 >> > demo_func(1, 2, 100)
Traceback (most recent call last):
  File "< stdin >", line 1, in < module >
TypeError: demo_func() missing 1 required keyword-only argument: 'b'
 >> > 
 >> > demo_func(1, 2, b=100)
(1, 2)
100

案例九 :可變關鍵字參數則不一樣,可變關鍵字參數一定得放在最后,下面三個示例中,不管關鍵字參數后面接位置參數,還是默認參數,還是可變參數,都會報錯。

>> > def demo_func(**kw, a):
  File "< stdin >", line 1
    def demo_func(**kw, a):
                        ^
SyntaxError: invalid syntax
 >> > 
 >> > def demo_func(**kw, a=1):
  File "< stdin >", line 1
    def demo_func(**kw, a=1):
                        ^
SyntaxError: invalid syntax
 >> > 
 >> > def demo_func(**kw, *args):
  File "< stdin >", line 1
    def demo_func(**kw, *args):
                        ^
SyntaxError: invalid syntax

案例十 :將上面的知識點串起來,四種參數類型可以在一個函數中出現,但一定要注意順序

def demo_func(arg1, arg2=10, *args, **kw):
    print("arg1: ", arg1)
    print("arg2: ", arg2)
    print("args: ", args)
    print("kw: ", kw)

試著調用這個函數,輸出如下:

>> > demo_func(1,12, 100, 200, d=1000, e=2000)
arg1:  1
arg2:  12
args:  (100, 200)
kw:  {'d': 1000, 'e': 2000}

案例十一 :使用單獨的 *,當你在給后面的位置參數傳遞時,對你傳參的方式有嚴格要求,你在傳參時必須要以關鍵字參數的方式傳參數,要寫參數名,不然會報錯。

>> > def demo_func(a, b, *, c):
...     print(a)
...     print(b)
...     print(c)
... 
 >> > 
 >> > demo_func(1, 2, 3)
Traceback (most recent call last):
  File "< stdin >", line 1, in < module >
TypeError: demo_func() takes 2 positional arguments but 3 were given
 >> > 
 >> > demo_func(1, 2, c=3)
1
2
3

3. 傳參的坑

函數參數傳遞的是實際對象的內存地址。如果參數是引用類型的數據類型(列表、字典等),在函數內部修改后,就算沒有把修改后的值返回回去,外面的值其實也已經發生了變化。

>> > def add_item(item, source_list):
...     source_list.append(item)
...
 >> > alist = [0,1]
 >> > add_item(2, alist)
 >> > alist
[0, 1, 2]
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85037
  • 函數參數
    +關注

    關注

    0

    文章

    6

    瀏覽量

    6008
  • key
    key
    +關注

    關注

    0

    文章

    51

    瀏覽量

    12860
收藏 人收藏

    評論

    相關推薦

    LOF算法的主要參數函數分別是什么

    LOF算法的思想是什么?LOF算法的主要參數函數分別是什么?
    發表于 09-10 06:43

    基于Python 函數基礎、參數以及高級用法的解析

    簡單地說,一個函數就是一組Python語句的組合,它們可以在程序中運行一次或多次運行。Python中的函數在其他語言中也叫做過程或子例程,那么這些被包裝起來的語句通過一個
    的頭像 發表于 02-01 15:53 ?4588次閱讀
    基于<b class='flag-5'>Python</b> <b class='flag-5'>函數</b>基礎、<b class='flag-5'>參數</b>以及高級用法的解析

    Python的Matplotlib函數匯總

    本文檔的主要內容詳細介紹的是Python的Matplotlib函數匯總免費下載。
    發表于 12-17 08:00 ?2次下載

    進階必備的68個Python 內置函數分

    來源: pypypypy 內置函數就是Python給你提供的,拿來直接用的函數,比如print.,input等。 截止到python版本3.6.2 ,
    的頭像 發表于 11-01 10:18 ?4138次閱讀

    Python入門之什么是函數

    Python函數比我們想象的更為靈活。由于Python函數是對象,所以函數對象可以賦值給其他的名字、傳遞給其他
    的頭像 發表于 02-21 14:24 ?528次閱讀

    python常用的內置函數和模塊

    python數字包含常用的內置函數和模塊,比如pow()、abs()、floor()、int()等函數,以及math、random等模塊。
    的頭像 發表于 03-10 10:10 ?987次閱讀

    Python函數詳解

    Python 中,函數是一段可重復使用的代碼塊,可以接受一些輸入(即函數參數),并根據輸入執行某些操作。函數可以幫助我們組織代碼、減少重
    的頭像 發表于 04-19 15:47 ?708次閱讀

    免費音頻傳輸函數分

    免費音頻傳輸函數分
    發表于 07-31 17:10 ?0次下載

    為什么Python沒有main函數

    今天的文章中,我們來討論一下為什么有的編程語言有main函數,而Python為什么沒有main函數
    發表于 08-17 11:47 ?346次閱讀

    python定義函數與調用函數的順序

    定義函數與調用函數的順序 函數被定義后,本身是不會自動執行的,只有在被調用后,函數才會被執行,得到相應的結果。但是在 Python 中我們要
    的頭像 發表于 10-04 17:17 ?1514次閱讀

    函數參數分類有哪些

    一、函數參數分類 函數參數分為兩類:形參 及 實參 形參:形參是在創建過程中聲明的參數,如果
    的頭像 發表于 11-14 11:13 ?2821次閱讀

    python如何定義一個函數

    一、Python3 函數 函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。 函數能提高應用的模塊性,和代碼的重復利用率。你已經知道
    的頭像 發表于 11-14 11:26 ?775次閱讀

    python函數返回多個參數

    函數是程序設計中的一個重要概念,在很多編程語言中都存在。函數可以接受輸入數據,并且根據輸入數據進行一系列操作,最后可以返回一個或多個結果。Python是一種非常流行的編程語言,也支持函數
    的頭像 發表于 11-21 16:37 ?1362次閱讀

    python調用math函數的方法

    中。本文將詳細介紹math模塊中的各種數學函數的調用方法,包括函數的功能、參數的使用和返回值的含義等方面,以幫助讀者更好地理解和應用這些函數。 一、導入math模塊 要使用math模塊
    的頭像 發表于 11-22 11:01 ?3159次閱讀

    不屬于python的內置函數

    Python是一種高級編程語言,它提供了許多內置函數,可以幫助開發人員更輕松地處理各種任務。但是,在Python中并非所有的函數都是內置函數
    的頭像 發表于 11-29 14:27 ?1578次閱讀
    百家乐讯特| 榆次百家乐的玩法技巧和规则| 澳门百家乐洗码提成查询| 百家乐透明发牌机| 华人博彩| 超级百家乐官网2龙虎斗| 百家乐扑克玩法| 威尼斯人娱乐城送38| 金木棉蓝盾在线娱乐| 澳门百家乐官网21点| 百家乐赌博出千| 大发888娱乐城大奖| 百家乐官网拍是什么| 百家乐官网赌场| 怎么看百家乐走势| A8百家乐官网游戏| 属虎和属猴牛人做生意| 大发888有破解的没| 澳门百家乐官网奥秘| 申请百家乐会员送彩金| 爱博彩到天上人间| 最新百家乐官网的玩法技巧和规则 | 678百家乐官网博彩赌场娱乐网规则| 百家乐如何抽千| 章丘市| 电子百家乐博彩正网| 百乐坊娱乐城噢门| 赌场百家乐官网的玩法技巧和规则| 姚记百家乐的玩法技巧和规则 | 百家乐赢钱皇冠| 皇冠现金网导航| 娱乐城百家乐官网的玩法技巧和规则| 大发888游戏客服电话| 百家乐官网一柱擎天| 百盛百家乐的玩法技巧和规则| 娱乐城百家乐官网技巧| 百家乐赌博详解| 澳门百家乐官网心德| 百家乐赌场破解| 百家乐官网折叠桌| 百家乐免费注册|