成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

python學(xué)習(xí)筆記-函數(shù)的參數(shù)

jasperyang / 2675人閱讀

摘要:默認(rèn)參數(shù)的坑默認(rèn)參數(shù)的默認(rèn)值指向的必需時(shí)不變對象。舉一個(gè)例說明當(dāng)函數(shù)的默認(rèn)參數(shù)默認(rèn)為一個(gè)可變對象時(shí),會出現(xiàn)什么狀況。例如調(diào)用函數(shù)輸出結(jié)果當(dāng)然,如果已經(jīng)又一個(gè)對象,也可以在傳入時(shí)的名前輸入,會自動將拆分成關(guān)鍵字參數(shù)。

函數(shù)就像是一個(gè)黑盒子,我們將相關(guān)的一些功能打包成一個(gè)函數(shù),后續(xù)再調(diào)用的時(shí)候,我們不再關(guān)心內(nèi)部如何實(shí)現(xiàn),而是只關(guān)心這個(gè)函數(shù)需要輸入(Input)什么,需要輸出(Output)什么。 其中函數(shù)的輸入就是參數(shù),輸出就是Return。

Python支持的參數(shù)有四種類型:

必選參數(shù)

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

可變參數(shù)

關(guān)鍵字參數(shù)
下面我們來一一介紹一下。

必選參數(shù)

必選參數(shù)就是調(diào)用一個(gè)函數(shù)時(shí),必須輸入的參數(shù)。
例如我們定義一個(gè)函數(shù)

 def my_sum(x,y):
    return x+y

此時(shí),my_sum函數(shù)的x,y參數(shù)就是必選參數(shù),在調(diào)用該函數(shù)時(shí)候必須輸入,不可以省略。

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

默認(rèn)參數(shù)是指在調(diào)用函數(shù)時(shí)可選擇性的輸入或者不輸入。不輸入時(shí),則參數(shù)為默認(rèn)值。例如我們定義一個(gè)用于打印學(xué)生信息的函數(shù)。學(xué)生的信息包括姓名、年齡、生源。這些學(xué)生大多數(shù)來自浙江省,那么這個(gè)函數(shù)可以這么定義:

def print_info(name,age=20,province="Zhejiang"):
    print name,age,province

對于大多數(shù)浙江的學(xué)生且年齡都是20,我們只需要這么調(diào)用函數(shù)即可:print_info("Lilei")。此時(shí)我們并沒有輸入province參數(shù),函數(shù)默認(rèn)為年齡20,生源為Zhejiang

對于少數(shù)來自外省的學(xué)生,且年齡不為20的學(xué)生,我們可以這么按順序排列默認(rèn)參數(shù),即先年齡,后生源,順序與函數(shù)定義的時(shí)候一致:
print_info("Lucy",21,"Jiangsu")。此時(shí)province就修改成Jiangsu了。

如果需要跳過某個(gè)默認(rèn)參數(shù)或則不按順序傳入默認(rèn)參數(shù),我們則需要寫上參數(shù)名。例如:print_info("Tom",province="Hebei")

使用默認(rèn)參數(shù)可以大大降低函數(shù)調(diào)用的復(fù)雜性。例如對于有很多參數(shù)的函數(shù),某些參數(shù)在實(shí)際業(yè)務(wù)中經(jīng)常變化,有些參數(shù)缺較少變化。我們可以將這些參數(shù)按其在實(shí)際業(yè)務(wù)中的變化頻率從高到底排列,并對變化頻率低的參數(shù)設(shè)為默認(rèn)參數(shù)。實(shí)際調(diào)用時(shí),我們只需要傳入必要的參數(shù)值即可。這樣我們可以實(shí)現(xiàn)只定義一個(gè)函數(shù)卻能滿足多種情境。

默認(rèn)參數(shù)的坑

默認(rèn)參數(shù)的默認(rèn)值指向的必需時(shí)不變對象。
舉一個(gè)例說明當(dāng)函數(shù)的默認(rèn)參數(shù)默認(rèn)為一個(gè)可變對象時(shí),會出現(xiàn)什么狀況。

def add_item(items=[]):
    items.append("apple")
    return items

我們想要實(shí)現(xiàn)的功能是,調(diào)用該函數(shù),會對傳入的list最后添加一個(gè)apple元素。若 `items`參數(shù)未傳入,則默認(rèn)是一個(gè)空list。

當(dāng)我們第一次調(diào)用add_item()函數(shù)時(shí),返回["apple"],沒什么錯(cuò)誤。

但我們再一次調(diào)用add_item()函數(shù)時(shí),卻返回了`["apple","apple"]。這與我們預(yù)期的不相符合。因?yàn)槲覀兊诙握{(diào)用也未傳入任何參數(shù)。

其原因是add_item()函數(shù)的默認(rèn)參數(shù)在函數(shù)定義的時(shí)候就已經(jīng)在內(nèi)存生成。第一次、第二次的默認(rèn)參數(shù)指向的是同一個(gè)list對象。其一次調(diào)用函數(shù)對該list對象的修改會影響后一次函數(shù)的調(diào)用。

可變參數(shù)

在實(shí)際情況下,我們經(jīng)常會碰到某函數(shù)的參數(shù)個(gè)數(shù)不一定的情況。例如我們想要寫一個(gè)計(jì)算幾個(gè)數(shù)字的平方和的函數(shù)。
當(dāng)然我們可以預(yù)先將這些數(shù)字組裝成一個(gè)list或者tuple再傳入函數(shù)。代碼如下:

# 定義函數(shù)
def quadratic_sum(numbers):
    sum = 0
    for number in numbers:
        sum = sum + number
    return sum    

# 先將數(shù)字組成一個(gè)list
ns = [1,3,2,6,2]
# 將list傳入函數(shù)
quadratic_sum(ns)    

在Python中,我們可以直接定義一個(gè)有可變參數(shù)的函數(shù),我們無需預(yù)先組裝一個(gè)list或者tuple,而直接傳入函數(shù)??勺儏?shù)的表示方法是在參數(shù)名前加一個(gè)*。
傳入的可變參數(shù)會被Python組裝成一個(gè)tuple,tuple名即為函數(shù)定義的可變參數(shù)名。

# 定義一個(gè)有可變參數(shù)的函數(shù)
def quadratic_sum(*numbers):
    sum = 0
    for number in numbers:
        sum = sum + number
    return sum
# 直接調(diào)用函數(shù),無需預(yù)先組裝成一個(gè)list或者tuple。
quadratic_sum(1,3,2,6,2)

此時(shí)我們已經(jīng)有了一個(gè)支持可變參數(shù)的函數(shù),但是我們現(xiàn)在又有一個(gè)list比如[1,3,2,6,2]。我們還需要把這個(gè)list一個(gè)拆成一個(gè)數(shù)字傳入函數(shù)嗎?顯然這么做不科學(xué)。
Python提供了一個(gè)簡單的解決方案。我們只需要在傳入的list名前加一個(gè)*,Python就會幫我們把這個(gè)list或tuple拆成可變參數(shù)傳入。例如:

ns = [1,2,3,54,2]
quadratic_sum(*ns)
關(guān)鍵字參數(shù)

關(guān)鍵字參數(shù)于可變參數(shù)類似。關(guān)鍵字參數(shù)可以將傳入的參數(shù)組裝成一個(gè)字典Dict。
定義一個(gè)關(guān)鍵字參數(shù)的方法就是在關(guān)鍵字參數(shù)前寫**。例如

def user_info(name,age,**kw):
    print "Name:",name,"Age:",age,"Keyword:",kw
# 調(diào)用函數(shù)
user_info("Charlie",20,gender="male",city="Hangzhou")

輸出結(jié)果:
Name: Chalrie Age: 20 Keyword: {"gender": "male", "city": "Hanzhou"}

當(dāng)然,如果已經(jīng)又一個(gè)dict對象,也可以在傳入時(shí)的dict名前輸入**,Python會自動將Dict拆分成關(guān)鍵字參數(shù)。

keyword = {"gender": "male", "city": "Hanzhou"}
user_info("charlie",20,**keyword)
參數(shù)組合

Python函數(shù)的參數(shù)可以是上述四種參數(shù)的任意組合,但是其順序必須是必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、關(guān)鍵字參數(shù)。Python會根據(jù)這個(gè)順序進(jìn)行匹配。例如我們定義一個(gè)函數(shù):

def func(name,age=20,gender="female",*args,**kw):
    print "age:",age
    print "name:",name
    print args
    print kw

上面這個(gè)函數(shù),name是必選參數(shù)。調(diào)用該函數(shù)時(shí)若沒有傳入name參數(shù),則會報(bào)錯(cuò)。
age,gender是默認(rèn)函數(shù)??梢詡魅胍部梢圆粋魅?。不傳入則是默認(rèn)值。
其余無關(guān)鍵字的參數(shù)會被組裝成一個(gè)叫argstuple。
其余有關(guān)鍵字的參數(shù)會被組裝成一個(gè)叫kw的dict。
例如:
func("Charlie",gender="male",2,3,4,city="hangzhou",province="Zhejiang")

關(guān)于更多參數(shù)類型的內(nèi)容,可以閱讀一篇文章:
http://www.qiangtaoli.com/boo...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/44249.html

相關(guān)文章

  • python學(xué)習(xí)筆記-調(diào)用函數(shù)

    摘要:調(diào)用函數(shù)時(shí)常見的錯(cuò)誤函數(shù)參數(shù)個(gè)數(shù)不正確會給我們返回,并給出確切的錯(cuò)誤信息。例如將變量名指向這個(gè)取整函數(shù)調(diào)用函數(shù),即調(diào)用這個(gè)取整數(shù)的函數(shù) python有許多內(nèi)置的函數(shù)(Build-in Functions)例如abs()——求絕對值的函數(shù)供我們使用。那么我們?nèi)绾握{(diào)用這些函數(shù)呢?直接書寫函數(shù)名帶括號并在括號內(nèi)傳入?yún)?shù)即可。例如abs(-10.2)即可。python內(nèi)置的函數(shù)可以到https...

    AZmake 評論0 收藏0
  • python學(xué)習(xí)筆記 函數(shù)

    摘要:一等函數(shù)在中,函數(shù)是一等對象。匿名函數(shù)關(guān)鍵字在表達(dá)式內(nèi)創(chuàng)建匿名函數(shù)然而,簡單的句法限制了函數(shù)的定義體只能使用純表達(dá)式,即函數(shù)的定義體中不能賦值,不能使用等語句。匿名函數(shù)適合用于作為函數(shù)的參數(shù) 一等函數(shù) 在python中,函數(shù)是一等對象。編程語言理論家把一等對象定義為滿足以下條件的程序?qū)嶓w: 在運(yùn)行時(shí)創(chuàng)建 能賦值給變量或數(shù)據(jù)結(jié)構(gòu)中的元素 能作為參數(shù)傳給函數(shù) 能作為函數(shù)的返回結(jié)果 在p...

    Scorpion 評論0 收藏0
  • python學(xué)習(xí)筆記-定義函數(shù)

    摘要:空函數(shù)如果想要定義一個(gè)什么都不做的函數(shù),那么可以用語句。為函數(shù)添加參數(shù)檢查我們對作一些改寫。此時(shí)調(diào)用函數(shù)時(shí)傳入錯(cuò)誤的參數(shù)則會拋出。函數(shù)返回多個(gè)值支持返回多個(gè)值。 python中定義函數(shù)的關(guān)鍵詞是def,例如定義一個(gè)叫my_function的函數(shù)我們可以這么定義, 其中括號內(nèi)的x,y為傳入的參數(shù)。 def my_function(): # function body 返回值 函數(shù)...

    CoderStudy 評論0 收藏0
  • python學(xué)習(xí)筆記-map/reduce/filter/sorted

    摘要:會依次將中的數(shù)據(jù)傳遞到中,根據(jù)返回的或者,留下或者拋棄這個(gè)值。而對于字符串,則是根據(jù)字符串對應(yīng)的碼表進(jìn)行排序。同時(shí)也是一個(gè)高階函數(shù),可以實(shí)現(xiàn)自定義的排序方式。 map/reduce是一種編程思想,在各個(gè)領(lǐng)域都有它的實(shí)踐。網(wǎng)上有一個(gè)簡單的例子解釋map/reduce。比如說你需要數(shù)一下某一個(gè)圖書館中有多少本藏書。最傻瓜的做法就是排一個(gè)人從頭數(shù)到尾。這樣速度慢,低效。另一種方法就是先將圖書...

    用戶83 評論0 收藏0
  • python-學(xué)習(xí)筆記 內(nèi)部函數(shù)

    摘要:返回該函數(shù)的時(shí)候,攜帶了該內(nèi)部函數(shù)引用的外部函數(shù)參數(shù)和局部變量。每次返回的函數(shù)都是不同的對象的結(jié)果為內(nèi)部函數(shù)本身被返回時(shí),所攜帶的參數(shù)或局部變量時(shí)那一刻的值例如在函數(shù)內(nèi)有循環(huán),內(nèi)部函數(shù)引用的循環(huán)變量。 內(nèi)部函數(shù) Python可以在函數(shù)內(nèi)部再定義一個(gè)函數(shù)。這個(gè)定義的內(nèi)部函數(shù)可以引用外部函數(shù)的參數(shù)和局部變量。事實(shí)上,內(nèi)部函數(shù)還可以在其中再定義內(nèi)部函數(shù),實(shí)現(xiàn)內(nèi)部函數(shù)多重嵌套。例如: def ...

    Gilbertat 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<