在開發中我們可以借助于相關插件或使用Python內置函數"help()”來查看某個函數的參數說明,以查看內置函數sorted()為例:
創新互聯成立于2013年,先為德江等服務建站,德江等地企業,進行企業商務咨詢服務。為德江企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
函數參數包括:必選參數、默認參數、可選參數、關鍵字參數。
1、默認參數:放在必選參數之后,計算x平方的函數:
這樣的話每次計算不同冪函數都要重寫函數,非常麻煩,可使用以下代碼計算:
默認參數最大好處就是降低調用函數的難度。
2、可變參數:就是傳入的參數個數是可變的,可以是1個、2個到任意個,還可以是0個,在參數前面加上*就是可變參數。在函數內部,參數numbers接收得到的是一個tuple,調用該函數時,可以傳入任意個參數,包括0個參數:
也可以類似可變參數,先組裝一個dict,然后,把該dict轉換為關鍵字參數傳進去:
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 module
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 module
TypeError: a() takes exactly 0 arguments (3 given)
參數可以是任意類型。
比如可以是列表。
-------------------------------
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 nlen(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函數的參數類型主要包括必選參數、可選參數、可變參數、位置參數和關鍵字參數,本文介紹一下他們的定義以及可變數據類型參數傳遞需要注意的地方。
必選參數(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引入的特性,可參考:。 使用一個星號隔開:
在位置參數一節介紹過星號前面的參數可以是位置參數和關鍵字參數。星號后面的參數都是強制關鍵字參數,必須以指定參數名的方式傳參,如果強制關鍵字參數沒有設置默認參數,調用函數時必須傳參。
執行結果:
也可以在可變參數后面命名關鍵字參數,這樣就不需要星號分隔符了:
執行結果:
在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--
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核函數參數 核函數 python
文章源于:http://m.kartarina.com/article8/hgshop.html
成都網站建設公司_創新互聯,為您提供網站維護、手機網站建設、微信公眾號、定制網站、定制開發、面包屑導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯