當前位置:首頁 » 編程語言 » python函數的參數

python函數的參數

發布時間: 2022-11-22 02:49:07

python函數的參數類型

Python函數的參數類型主要包括必選參數、可選參數、可變參數、位置參數和關鍵字參數,本文介紹一下他們的定義以及可變數據類型參數傳遞需要注意的地方。

必選參數(Required arguments)是必須輸入的參數,比如下面的代碼,必須輸入2個參數,否則就會報錯:

其實上面例子中的參數 num1和num2也屬於關鍵字參數,比如可以通過如下方式調用:

執行結果:

可選參數(Optional arguments)可以不用傳入函數,有一個默認值,如果沒有傳入會使用默認值,不會報錯。

位置參數(positional arguments)根據其在函數定義中的位置調用,下面是pow()函數的幫助信息:

x,y,z三個參數的的順序是固定的,並且不能使用關鍵字:

輸出:

在上面的pow()函數幫助信息中可以看到位置參數後面加了一個反斜杠 / ,這是python內置函數的語法定義,Python開發人員不能在python3.8版本之前的代碼中使用此語法。但python3.0到3.7版本可以使用如下方式定義位置參數:

星號前面的參數為位置參數或者關鍵字參數,星號後面是強制關鍵字參數,具體介紹見強制關鍵字參數。

python3.8版本引入了強制位置參數(Positional-Only Parameters),也就是我們可以使用反斜杠 / 語法來定義位置參數了,可以寫成如下形式:

來看下面的例子:

python3.8運行:

不能使用關鍵字參數形式賦值了。

可變參數 (varargs argument) 就是傳入的參數個數是可變的,可以是0-n個,使用星號( * )將輸入參數自動組裝為一個元組(tuple):

執行結果:

關鍵字參數(keyword argument)允許將任意個含參數名的參數導入到python函數中,使用雙星號( ** ),在函數內部自動組裝為一個字典。

執行結果:

上面介紹的參數可以混合使用:

結果:

注意:由於傳入的參數個數不定,所以當與普通參數一同使用時,必須把帶星號的參數放在最後。

強制關鍵字參數(Keyword-Only Arguments)是python3引入的特性,可參考:https://www.python.org/dev/peps/pep-3102/。 使用一個星號隔開:

在位置參數一節介紹過星號前面的參數可以是位置參數和關鍵字參數。星號後面的參數都是強制關鍵字參數,必須以指定參數名的方式傳參,如果強制關鍵字參數沒有設置默認參數,調用函數時必須傳參。

執行結果:

也可以在可變參數後面命名關鍵字參數,這樣就不需要星號分隔符了:

執行結果:

在Python對象及內存管理機制中介紹了python中的參數傳遞屬於對象的 引用傳遞 (pass by object reference),在編寫函數的時候需要特別注意。

先來看個例子:

執行結果:

l1 和 l2指向相同的地址,由於列表可變,l1改變時,l2也跟著變了。

接著看下面的例子:

結果:

l1沒有變化!為什麼不是[1, 2, 3, 4]呢?

l = l + [4]表示創建一個「末尾加入元素 4「的新列表,並讓 l 指向這個新的對象,l1沒有進行任何操作,因此 l1 的值不變。如果要改變l1的值,需要加一個返回值:

結果:

下面的代碼執行結果又是什麼呢?

執行結果:

和第一個例子一樣,l1 和 l2指向相同的地址,所以會一起改變。這個問題怎麼解決呢?

可以使用下面的方式:

也可以使用淺拷貝或者深度拷貝,具體使用方法可參考Python對象及內存管理機制。這個問題在Python編程時需要特別注意。

本文主要介紹了python函數的幾種參數類型:必選參數、可選參數、可變參數、位置參數、強制位置參數、關鍵字參數、強制關鍵字參數,注意他們不是完全獨立的,比如必選參數、可選參數也可以是關鍵字參數,位置參數可以是必選參數或者可選參數。

另外,python中的參數傳遞屬於對象的 引用傳遞 ,在對可變數據類型進行參數傳遞時需要特別注意,如有必要,使用python的拷貝方法。

參考文檔:

--THE END--

② Python參數類型

上一期我們學習參數傳遞怎麼傳遞,也了解了參數的幾種類型。

首先,我們再來回顧一下,形參和實參:

形參是在定義函數時定義的,放在函數名後面的圓括弧里,可為空

實參是調用函數時為形參傳入具體的參數值

簡單總結一下,誰調用函數,誰就負責傳入參數。

好吶,本期我們來詳細學習函數幾種參數類型,大綱如下:

python函數的參數名是無意義的,Python允許在調用函數時通過通過名字來傳入參數值。

位置參數:按照形參位置傳入的參數

調用函數時,實參默認按位置順序傳遞的。同時實參個數也要和形參匹配

舉一個小栗子

如果實參的個數與形參不匹配時,調用函數運行就會報錯

Python中,形參與調用函數緊密聯系在一起的。

關鍵字參數:調用函數時,使形參名稱來傳遞參數,形式為「形參名=實參」

關鍵字參數,又叫命名參數,傳遞時無需考慮參數位置和順序

舉一個小栗子

默認參數:定義函數時,我們可以為形參提前設置具體的值。

在定義函數時,默認參數要放到位置等其他參數後面

在調用函數時,默認參數是可選的。如果傳入新值,則會覆蓋默認值

舉一個小栗子

注意,默認值不能位於位置參數前面,否則程序會報錯誤

不定長參數又名可變參數。

不定長參數指的是可變數量的參數,分兩種情況:

如果不定長參數後面,可以新增參數嗎?

我們通過例子來看,會發生什麼?

運行上面的程序,Python解釋器會報錯

原因是,形參a已經是不定長參數,我們調用的test(2,3,4)傳入的三個實參,系統自動把它們屬於形參a的值,形參b 和形參c就等於沒有值傳入,這時候系統就認為,調用函數的對象,參數沒有傳夠。

為了解決這一報錯,python引入了 強制命名參數

規定,調用不定參數後面有跟位置參數的函數時,傳入給位置參數時,必須要強制命名參進行傳參。

逆向參數收集針對的對象傳入函數的實參

調用函數時,如果實參是元組,列表或者字典,通過在實參前面加入星號,可以自動把元素進行隔開,然後再轉入給函數進行處理

舉一個小栗子

本期,我們詳細學習了參數幾種類型,為後面我們學習函數,打好基礎。

實踐是檢驗真理的過程,大家多動手練習練習,會有不一樣的奇妙旅程~

好吶,以上是本期內容,歡迎大佬們評論區指正~

③ Python基礎實戰之函數的參數講解(三)

參數可以是任意類型。

比如可以是列表。

-------------------------------

library=['python精通','MySQL','數據分析','人工智慧']

#形參

def add_book(bookname):

library.append(bookname)

print('圖書添加成功!')

pass

def show_book(books):

for book in books:

print(book)

pass

pass

#調用函數

add_book('新概念英語')

show_book(library)

------------------------------

#輸出列表中所有大於50的數

list1=[23,45,77,88,58,10]

def get_list(list_1):

new_list=[ ]

for e in list_1:

if e>=50:

new_list.append(e)

pass

pass

print(new_list)

pass

#調用函數

get_list(list1) #[77,88,58]

------------------------------

#刪除列表中小於50的數

def remove_from_list(list_1):

n=0

while n<len(list_1): p=""> </len(list_1):>

if list_1[n]<50:

list_1.remove(list_1[n])

pass

else:

n+=1

pass

pass

print(list_1)

pass

#調用函數

remove_from_list(list1) #[77,88,58]

④ python怎麼查看函數有什麼參數

Python中查看函數參數有四種方式:

1. F(arg1,arg2,…)

這是最常見的定義方式,一個函數可以定義任意個參數,每個參數間用逗號分割,用這種方式定義的函數在調用的的時候也必須在函數名後的小括弧里提供個數相等的值(實際參數),而且順序必須相同,也就是說在這種調用方式中,形參和實參的個數必須一致,而且必須一一對應,也就是說第一個形參對應這第一個實參。例如:

代碼如下:

def a(x,y):print x,y

調用該函數,a(1,2)則x取1,y取2,形參與實參相對應,如果a(1)或者a(1,2,3)則會報錯。

2. F(arg1,arg2=value2,…)

這種方式就是第一種的改進版,提供了默認值,例如:

代碼如下:

def a(x,y=3):print x,y

調用該函數,a(1,2)同樣還是x取1,y取2,但是如果a(1),則不會報錯了,這個時候x還是1,y則為默認的3。上面這倆種方式,還可以更換參數位置,比如a(y=4,x=3)用這種形式也是可以的。

3. F(*arg1)

上面兩種方式是有多少個形參,就傳進去多少個實參,但有時候會不確定有多少個參數,則此時第三種方式就比較有用,它以一個*加上形參名的方式來表示這個函數的實參個數不定,可能為0個也可能為n個。注意一點是,不管有多少個,在函數內部都被存放在以形參名為標識符的元組中。

代碼如下:

def a(*x):print x

>>> a(1,2,3)
(1, 2, 3)
>>> a(x=1,y=2,z=3)
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
TypeError: a() got an unexpected keyword argument 'x'

4. F(**arg1)

形參名前加兩個*表示,參數在函數內部將被存放在以形式名為標識符的dictionary中,這時調用函數的方法則需要採用arg1=value1,arg2=value2這樣的形式。

代碼如下:

def a(**x):print x

>>> a(x=1,y=2,z=3)
{'y': 2, 'x': 1, 'z': 3} #存放在字典中
>>> a(1,2,3) #這種調用則報錯
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
TypeError: a() takes exactly 0 arguments (3 given)

⑤ 簡述python函數中參數的幾種形態

在調用函數時,通常會傳遞參數,函數內部的代碼保持不變,針對 不同的參數處理不同的數據。

有位置傳參、關鍵字傳參、默認值參數、多值參數等。

1、參數傳遞

形參和實參:

形參:定義 函數時的 參數變數
實參:調用 函數時,使用的參數變數

參數傳遞的過程,就是 把實參的引用 傳遞給 形參 ,使用實參的值來執行函數體的過程。

在 Python 中,函數的 實參/返回值 都是是靠 引用 來傳遞來的

2、位置實參

按照參數位置,依次傳遞參數,這是最普通的方式。

⑥ Python的函數和參數

parameter 是函數定義的參數形式
argument 是函數調用時傳入的參數實體。

對於函數調用的傳參模式,一般有兩種:

此外,

也是關鍵字傳參

python的函數參數定義一般來說有五種: 位置和關鍵字參數混合 僅位置參數 僅關鍵字參數 可變位置參數 可變關鍵字參數 。其中僅位置參數的方式僅僅是一個概念,python語法中暫時沒有這樣的設計。
通常我們見到的函數是位置和關鍵字混合的方式。

既可以用關鍵字又可以用位置調用

這種方式的定義只能使用關鍵字傳參的模式

f(*some_list) 與 f(arg1, arg2, ...) (其中some_list = [arg1, arg2, ...])是等價的

網路模塊request的request方法的設計
多數的可選參數被設計成可變關鍵字參數

有多種方法能夠為函數定義輸出:

非常晦澀

如果使用可變對象作為函數的默認參數,會導致默認參數在所有的函數調用中被共享。
例子1:

addItem方法的data設計了一個默認參數,使用不當會造成默認參數被共享。
python裡面,函數的默認參數被存在__default__屬性中,這是一個元組類型
例子2:

在例子1中,默認參數是一個列表,它是mutable的數據類型,當它寫進 __defauts__屬性中時,函數addItem的操作並不會改變它的id,相當於 __defauts__只是保存了data的引用,對於它的內存數據並不關心,每次調用addItem,都可以修改 addItem.__defauts__中的數據,它是一個共享數據。
如果默認參數是一個imutable類型,情況將會不一樣,你無法改變默認參數第一次存入的值。

例子1中,連續調用addItem('world') 的結果會是

而不是期望的

⑦ python-函數參數默認值的一些問題

1.在定義有默認參數的函數時,需要注意以下: 必傳參數必須在前面,默認參數在後;

備註:python為了簡化函數的調用,提供了默認參數機制,這樣在調用函數時,就可以省略最後一個參數不寫;設置何種參數為默認參數?一般來說,將參數值變化小的設置為默認參數。

2. 若參數為列表,且有默認值

2.1若調用方法時傳該參數,則沒有問題
2.2 若調用方法時不傳該參數,則有問題 ,問題是:每次調用該方法時,該參數不是創建方法時的默認值,而是多次調用被修改後的列表。

⑧ Python中定義函數默認參數值的使用注意事項

4.7.1. 默認參數值
最常用的一種形式是為一個或多個參數指定默認值。這會創建一個可以使用比定義是允許的參數更少的參數調用的函數,例如:
def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
while True:
ok = input(prompt)
if ok in ('y', 'ye', 'yes'):
return True
if ok in ('n', 'no', 'nop', 'nope'):
return False
retries = retries - 1
if retries < 0:
raise OSError('uncooperative user')
print(complaint)
這個函數可以通過幾種不同的方式調用:
只給出必要的參數:
ask_ok('Do you really want to quit?')
給出一個可選的參數:
ask_ok('OK to overwrite the file?', 2)
或者給出所有的參數:
ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')
這個例子還介紹了 in 關鍵字。它測定序列中是否包含某個確定的值。
默認值在函數 定義 作用域被解析,如下所示:
i = 5
def f(arg=i):
print(arg)
i = 6
f()
將會輸出 5。
重要警告: 默認值只被賦值一次。這使得當默認值是可變對象時會有所不同,比如列表、字典或者大多數類的實例。例如,下面的函數在後續調用過程中會累積(前面)傳給它的參數:
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
這將輸出:
[1]
[1, 2]
[1, 2, 3]
如果你不想讓默認值在後續調用中累積,你可以像下面一樣定義函數:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L

⑨ python怎麼查看函數參數

在開發中我們可以藉助於相關插件或使用Python內置函數"help()」來查看某個函數的參數說明,以查看內置函數sorted()為例:

⑩ python-函數可變參數類型

python中的函數,大多需要配置參數,以下是幾種函數的參數類型:

1.必備參數:以正確的順序、個數傳入函數。調用時的參數情況要和聲明時一樣。最常用的情況。

def tplink(a,b):

    c=a+b+b

    return c 

tplink(4,2)

2.關鍵字參數:使用關鍵字參數允許函數調用時參數的順序和聲明時不一致,因為python解析器會在調用函數時,用參數名匹配參數值。

def tplink(age1,age2):

    ageall=age1+age2+age2

    return ageall

tplink(age2=4,age1=2)

3.默認參數:默認某個參數的取值

def tplink(age1,age2=5):

ageall=age1+age2+age2

return ageall

tplink(age1=4)

4.不定長參數:在聲明時並不確定 調用時的參數數量。這種情況,可以用不定長參數進行解決,具體操作是在參數名前用*。

但不能和 關鍵字參數並用。一般在正常參數arg之後。

*args、**kwargs的定義:

這兩個都是python中的不定長參數,又稱為可變參數。

*args 表示任何多個無名參數,它是一個 tuple ;

**kwargs 表示關鍵字參數,它是一個dict。

同時使用 * args和 ** kwargs 時,必須 * args參數列要在 ** kwargs前。且都在arg之後。

函數在調用時,會根據順序,看是否放進 *args 或者 **kwargs中。

具體可根據實際情況使用,可以 更方便靈活的接收信息。

熱點內容
androidstudio結構 發布:2025-01-16 06:39:22 瀏覽:244
五區布魯是什麼伺服器 發布:2025-01-16 06:35:13 瀏覽:864
androidhandler更新ui 發布:2025-01-16 06:21:28 瀏覽:170
java與mvc 發布:2025-01-16 06:20:40 瀏覽:332
lol最新刷金幣腳本 發布:2025-01-16 05:56:22 瀏覽:563
電腦登陸加密 發布:2025-01-16 05:21:57 瀏覽:153
安卓怎麼修復閃退 發布:2025-01-16 05:21:54 瀏覽:554
易盾加密 發布:2025-01-16 05:20:51 瀏覽:895
html上傳圖片的代碼 發布:2025-01-16 05:16:55 瀏覽:601
搭建伺服器租用電信的怎麼樣 發布:2025-01-16 05:12:32 瀏覽:50