欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中函數(shù)的各種類型參數(shù)解讀

 更新時間:2023年08月17日 09:41:22   作者:獵風(fēng)工作室  
這篇文章主要介紹了Python中函數(shù)的各種類型參數(shù)用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Python中函數(shù)的參數(shù)類型非常豐富多彩。

Python的函數(shù)支持的參數(shù)類型包括:

  • (1)位置參數(shù)
  • (2)默認(rèn)參數(shù)
  • (3) 可變參數(shù)
  • (4)關(guān)鍵字參數(shù)
  • (5)命名關(guān)鍵字參數(shù)

接下來,我們一一來學(xué)習(xí)一下:

1.位置參數(shù)

位置參數(shù),就是普通的參數(shù)。寫在函數(shù)名后的小括號中,

如下面例子:

def power(x):
    return x * x
def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

2.默認(rèn)參數(shù)

默認(rèn)參數(shù)允許函數(shù)設(shè)置參數(shù)的默認(rèn)值。例如:

def power(x, n = 2):......

其中參數(shù)n的默認(rèn)值為2,調(diào)用函數(shù)時,可以省略這個參數(shù),如:power(5),這里的5會賦值給x。

注意事項:

1.必選參數(shù)在前,默認(rèn)參數(shù)在后。

Why?因為Python中函數(shù)的實際參數(shù)與形式參數(shù)的匹配順序是從左至右的。

2.如何設(shè)置默認(rèn)參數(shù)?

變化大的參數(shù)放前面,變化小的參數(shù)放后面當(dāng)默認(rèn)的參數(shù)。

降低函數(shù)調(diào)用的難度。

例如:在某校的學(xué)生信息管理系統(tǒng)中,可以把年齡和城市設(shè)為默認(rèn)參數(shù)(因為都在一個城市,同年級的年齡也大都相同)。

def enroll(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    print('city:', city)

3.可以不按順序提供部分默認(rèn)參數(shù)。

當(dāng)不按順序提供部分默認(rèn)參數(shù)時,需要把參數(shù)名寫上。

如:

enroll('Bob', 'M', 7)
enroll('Adam', 'M', city='Tianjin')

4.一個默認(rèn)參數(shù)的大坑。

先定義一個函數(shù),傳入一個list,添加一個END再返回.

def add_end(L=[]):
    L.append('END')
    return L

試著用默認(rèn)參數(shù),連續(xù)執(zhí)行add_end?

你會發(fā)現(xiàn),似乎函數(shù)每次都“記住了”上次添加了’END’后的list。

原因是:

Python函數(shù)在定義的時候,默認(rèn)參數(shù)L的值就被計算出來了,即[],因為默認(rèn)參數(shù)L也是一個變量,它指向?qū)ο骩],每次調(diào)用該函數(shù),如果改變了L的內(nèi)容,則下次調(diào)用時,默認(rèn)參數(shù)的內(nèi)容就變了,不再是函數(shù)定義時的[]了。

默認(rèn)參數(shù)強(qiáng)烈建議指向不變對象!可以用None這個不變對象來實現(xiàn)。

def add_end(L=None):
    if L is None:
        L = []
    L.append('END')
    return L

如果可以設(shè)計一個不變對象,那就盡量設(shè)計成不變對象。

3.可變參數(shù)

參數(shù)個數(shù)不確定,可以用list和tuple來充當(dāng)參數(shù),但是需要現(xiàn)行構(gòu)造。

形式:

在參數(shù)名字前加 “*”號。

調(diào)用時可傳入任意個(包括0個)參數(shù)。

可變參數(shù)在調(diào)用時自動組裝為一個tuple。

list參數(shù)和tuple參數(shù)前加“*”可作為可變參數(shù)使用。

接下來,我們用例子來學(xué)習(xí)一下可變參數(shù)的用法。

需求:計算

a^2+b^2+c^2+......

利用list或tuple為參數(shù),可實現(xiàn)如下代碼:

def calc(numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
>>> calc([1, 2, 3])
14
>>> calc((1, 3, 5, 7))
84

但是用戶在調(diào)用函數(shù)時,需要事先構(gòu)造好一個list或tuple的數(shù)據(jù)集。

如果是用可變參數(shù),用戶可以直接輸入數(shù)據(jù)集,用逗號隔開,并且數(shù)據(jù)個數(shù)無硬性限制。

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
>>> calc(1, 2)
5
>>> calc()
0

在調(diào)用具有可變參數(shù)的函數(shù)時,可以利用list或tuple前加星號的形式來充當(dāng)可變參數(shù)實參。

如:

>>> nums = [1, 2, 3]
>>> calc(*nums)
14

4.關(guān)鍵字參數(shù)

關(guān)鍵字參數(shù)擴(kuò)展函數(shù)的功能。 允許你傳入0個或任意個含參數(shù)名的參數(shù),在函數(shù)內(nèi)部自動組裝為一個dict。

如:

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
>>> person('Michael', 30)
name: Michael age: 30 other: {}
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

一個dict參數(shù)可以當(dāng)成一個關(guān)鍵字參數(shù)

>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

注意:person函數(shù)內(nèi)部對extra的改變是改變的extra的副本,對extra這個dict本身并沒有做出改變。

試想你正在做一個用戶注冊的功能,除了用戶名和年齡是必填項外,其他都是可選項,利用關(guān)鍵字參數(shù)來定義這個函數(shù)就能滿足注冊的需求。

可變參數(shù)和關(guān)鍵字參數(shù)使用時機(jī)和形式

可變參數(shù)

  • 定義函數(shù)時,形式參數(shù)+‘*’,表示可變參數(shù),使用時,直接輸入可變數(shù)量的參數(shù)
  • 使用函數(shù)時,實際參數(shù)+‘*’,實際參數(shù)本身必須是一個list或者touple。

關(guān)鍵字參數(shù)

  • 定義函數(shù)時,形式參數(shù)+‘**’,表示關(guān)鍵字參數(shù),使用時,直接以“鍵=‘值’”的形式輸入
  • 使用函數(shù)時,實際參數(shù)+‘**’,實際參數(shù)本身必須是一個dict

5.命名關(guān)鍵字參數(shù)

命名關(guān)鍵字參數(shù):限制關(guān)鍵字參數(shù)的名字。例如:接收city和job作為關(guān)鍵字參數(shù)。

def person(name, age, *, city, job):
    print(name, age, city, job)

一個特殊分隔符“*”,*后面的參數(shù)被視為命名關(guān)鍵字參數(shù)。

>>> person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer

如果函數(shù)定義中已經(jīng)有了一個可變參數(shù),后面跟著的命名關(guān)鍵字參數(shù)就不再需要一個特殊分隔符*了:

def person(name, age, *args, city, job):
    print(name, age, args, city, job)

命名關(guān)鍵字參數(shù)必須傳入?yún)?shù)名,否則報錯

命名關(guān)鍵字參數(shù)可以有缺省值

def person(name, age, *, city='Beijing', job):
    print(name, age, city, job)
>>> person('Jack', 24, job='Engineer')
Jack 24 Beijing Engineer

6.參數(shù)的組合

在Python中定義函數(shù),可以用必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、關(guān)鍵字參數(shù)和命名關(guān)鍵字參數(shù),這5種參數(shù)都可以組合使用。

參數(shù)定義的順序必須是:必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、命名關(guān)鍵字參數(shù)和關(guān)鍵字參數(shù)。

7.練習(xí)

def f1(a,b,c=0,*args,**kw):
    print('a =',a,'b =',b,'c =',c,'args = ',args,'kw = ',kw)
def f2(a,b,c=0,*,d,**kw):
    print('a =',a,'b =',b,'c =',c,'d = ',d,'kw = ',kw)
f1(1,2)
f1(1,2,3)
f1(1,2,3,'a','b')
f1(1,2,3,'a','b',x = 99)
f2(1,2,3,d = 'aaa',ext = None)
args = (1,2,3,4)
kw = {'d':99,'x':'#'}
f1(*args,**kw)
args = (1,2,3)
kw = {'d':99,'x':'#'}
f2(*args,**kw)

答案:

a = 1 b = 2 c = 0 args =  () kw =  {}
a = 1 b = 2 c = 3 args =  () kw =  {}
a = 1 b = 2 c = 3 args =  ('a', 'b') kw =  {}
a = 1 b = 2 c = 3 args =  ('a', 'b') kw =  {'x': 99}
a = 1 b = 2 c = 3 d =  aaa kw =  {'ext': None}
a = 1 b = 2 c = 3 args =  (4,) kw =  {'d': 99, 'x': '#'}
a = 1 b = 2 c = 3 d =  99 kw =  {'x': '#'}

8.參數(shù)組合

對于任意函數(shù),都可以通過類似func(*args, **kw)的形式調(diào)用它,無論它的參數(shù)是如何定義的。

不要同時使用太多的組合,否則函數(shù)接口的可理解性很差。

例如:

#以下函數(shù)允許計算兩個數(shù)的乘積,請稍加改造,變成可接收一個或多個數(shù)并計算乘積
def product(x, y):
    return x * y

測試程序如下:

print('product(5) =', product(5))
print('product(5, 6) =', product(5, 6))
print('product(5, 6, 7) =', product(5, 6, 7))
print('product(5, 6, 7, 9) =', product(5, 6, 7, 9))
if product(5) != 5:
print('測試失敗!')
elif product(5, 6) != 30:
	print('測試失敗!')
elif product(5, 6, 7) != 210:
	print('測試失敗!')
elif product(5, 6, 7, 9) != 1890:
	print('測試失敗!')
else:
	try:
		product()
		print('測試失敗!')
	except TypeError:
		print('測試成功!')

答案:

 
def product(x, *num):
    for n in num:
        x = x * n
    return x

9.參數(shù)解包(拆包)

傳遞實參時,可以在序列類型的參數(shù)前添加星號,這樣他會自動將序列中的元素依次作為參數(shù)傳遞。

例如:

def fn1(a,b,c):
    print(a, b, c)
x = (1,2,3) # 元組數(shù)據(jù)
y = [4,5,6] # 列表數(shù)據(jù)
z = {'a':7, 'b':8, 'c':9} # 字典數(shù)據(jù)
fn1(*x)  # 元組解包  *
fn1(*y)  # 列表解包  *
fn1(**z) # 字典解包  通過 **對字典進(jìn)行解包
# 輸出為
1 2 3
4 5 6
7 8 9

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python使用requests?POST提交一個鍵多個值方式

    python使用requests?POST提交一個鍵多個值方式

    這篇文章主要介紹了python使用requests?POST提交一個鍵多個值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • anaconda升級sklearn版本的實現(xiàn)方法

    anaconda升級sklearn版本的實現(xiàn)方法

    這篇文章主要介紹了anaconda升級sklearn版本的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python學(xué)習(xí)之.iloc與.loc的區(qū)別、聯(lián)系和用法

    Python學(xué)習(xí)之.iloc與.loc的區(qū)別、聯(lián)系和用法

    loc和iloc都是pandas工具中定位某一行的函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python學(xué)習(xí)之.iloc與.loc的區(qū)別、聯(lián)系和用法的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Python雙精度浮點數(shù)運(yùn)算并分行顯示操作示例

    Python雙精度浮點數(shù)運(yùn)算并分行顯示操作示例

    這篇文章主要介紹了Python雙精度浮點數(shù)運(yùn)算并分行顯示操作,涉及Python數(shù)學(xué)運(yùn)算及顯示相關(guān)操作技巧,注釋備有詳盡的說明,需要的朋友可以參考下
    2017-07-07
  • Python數(shù)據(jù)結(jié)構(gòu)與算法之完全樹與最小堆實例

    Python數(shù)據(jù)結(jié)構(gòu)與算法之完全樹與最小堆實例

    這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法之完全樹與最小堆,結(jié)合實例形式分析了Python完全樹定義及堆排序功能實現(xiàn)相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • 一文詳解Python中的super?函數(shù)

    一文詳解Python中的super?函數(shù)

    這篇文章主要介紹了一文了解Python中的super?函數(shù),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • python中time.ctime()實例用法

    python中time.ctime()實例用法

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python中time.ctime()實例用法內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)參考下。
    2021-02-02
  • 解決Python 爬蟲URL中存在中文或特殊符號無法請求的問題

    解決Python 爬蟲URL中存在中文或特殊符號無法請求的問題

    今天小編就為大家分享一篇解決Python 爬蟲URL中存在中文或特殊符號無法請求的問題。這種問題,初學(xué)者應(yīng)該都會遇到,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 精心整理總結(jié)的Python自動化測試面試題

    精心整理總結(jié)的Python自動化測試面試題

    簡單來說,自動化測試框架包含了所有的測試工作所需的測試框架,下面這篇文章主要給大家介紹了關(guān)于Python自動化測試面試題的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • 在Python中獲取兩數(shù)相除的商和余數(shù)方法

    在Python中獲取兩數(shù)相除的商和余數(shù)方法

    今天小編就為大家分享一篇在Python中獲取兩數(shù)相除的商和余數(shù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11

最新評論