0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

Python 函數(shù)參數(shù)分類

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

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

接下來是正文。

1. 參數(shù)分類

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

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

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

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

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

從函數(shù)調(diào)用的角度來看,參數(shù)可以分為兩種:

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

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

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

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

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

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

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

輸出如下

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

2. 十一個案例

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

>> > 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'

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

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

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

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

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

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

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

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

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

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

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

>> > 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)
... 
 >> >

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

>> > 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)
... 
 >> >

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

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

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

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

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

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

試著調(diào)用這個函數(shù),輸出如下:

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

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

>> > 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. 傳參的坑

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

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

    關(guān)注

    54

    文章

    4756

    瀏覽量

    84284
  • 函數(shù)參數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    5977
  • key
    key
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

    12802
收藏 人收藏

    評論

    相關(guān)推薦

    LOF算法的主要參數(shù)函數(shù)分別是什么

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

    基于Python 函數(shù)基礎(chǔ)、參數(shù)以及高級用法的解析

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

    Python 函數(shù)默認返回None的原因

    Python 函數(shù)默認返回None是什么原因?定義的函數(shù)沒有返回值,Python 解釋器就會強行地默認給注入一段返回邏輯!實際上 Python
    的頭像 發(fā)表于 08-21 10:51 ?2569次閱讀
    <b class='flag-5'>Python</b> <b class='flag-5'>函數(shù)</b>默認返回None的原因

    Python的Matplotlib函數(shù)匯總

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

    進階必備的68個Python 內(nèi)置函數(shù)分

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

    Python入門之什么是函數(shù)

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

    python常用的內(nèi)置函數(shù)和模塊

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

    Python函數(shù)詳解

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

    免費音頻傳輸函數(shù)分

    免費音頻傳輸函數(shù)分
    發(fā)表于 07-31 17:10 ?0次下載

    為什么Python沒有main函數(shù)?

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

    函數(shù)參數(shù)分類有哪些

    一、函數(shù)參數(shù)分類 函數(shù)參數(shù)分為兩類:形參 及 實參 形參:形參是在創(chuàng)建過程中聲明的參數(shù),如果
    的頭像 發(fā)表于 11-14 11:13 ?2356次閱讀

    python如何定義一個函數(shù)

    一、Python3 函數(shù) 函數(shù)是組織好的,可重復(fù)使用的,用來實現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。 函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。你已經(jīng)知道
    的頭像 發(fā)表于 11-14 11:26 ?651次閱讀

    python函數(shù)返回多個參數(shù)

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

    python調(diào)用math函數(shù)的方法

    中。本文將詳細介紹math模塊中的各種數(shù)學(xué)函數(shù)的調(diào)用方法,包括函數(shù)的功能、參數(shù)的使用和返回值的含義等方面,以幫助讀者更好地理解和應(yīng)用這些函數(shù)。 一、導(dǎo)入math模塊 要使用math模塊
    的頭像 發(fā)表于 11-22 11:01 ?2436次閱讀

    不屬于python的內(nèi)置函數(shù)

    Python是一種高級編程語言,它提供了許多內(nèi)置函數(shù),可以幫助開發(fā)人員更輕松地處理各種任務(wù)。但是,在Python中并非所有的函數(shù)都是內(nèi)置函數(shù)
    的頭像 發(fā)表于 11-29 14:27 ?1259次閱讀