乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Python 學(xué)習(xí)之路四

       Four兄 2019-08-30

      目錄

      函數(shù)

      調(diào)用函數(shù)

      數(shù)據(jù)類型轉(zhuǎn)換

      定義函數(shù)

      空函數(shù)

      參數(shù)檢查

      返回多個值

      函數(shù)的參數(shù)

      位置參數(shù)

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

      可變參數(shù)

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

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


      繼 'Python 學(xué)習(xí)之路三':

      函數(shù)

      調(diào)用函數(shù)

      Python 內(nèi)置了很多有用的函數(shù),我們可以直接調(diào)用。

      要調(diào)用一個函數(shù),需要知道函數(shù)的名稱和參數(shù),比如求絕對值的函數(shù) abs,只有一個參數(shù)??梢灾苯訌?Python 的官方網(wǎng)站查看文檔:

      https://docs./3/library/functions.html

      官網(wǎng) 3.7.2 版本內(nèi)置函數(shù)匯總(截圖):

      也可以在交互式命令行通過 help(abs)查看 abs 函數(shù)的幫助信息。調(diào)用 abs 函數(shù):

      1. >>> abs(100)
      2. 100
      3. >>> abs(-100)
      4. 100
      5. >>> abs(12.12)
      6. 12.12
      7. >>>

      調(diào)用函數(shù)的時候,如果傳入的參數(shù)數(shù)量不對,會報 TypeError 的錯誤,并且 Python 會明確地告訴你:abs()有且僅有 1 個參數(shù),但給出了兩個:

      1. >>> abs(11,22)
      2. Traceback (most recent call last):
      3. File '<pyshell#114>', line 1, in <module>
      4. abs(11,22)
      5. TypeError: abs() takes exactly one argument (2 given)
      6. >>>

      如果傳入的參數(shù)數(shù)量是對的,但參數(shù)類型不能被函數(shù)所接受,也會報 TypeError 的錯誤,并且給出錯誤信息:str 是錯誤的參數(shù)類型:

      1. >>> abs('a')
      2. Traceback (most recent call last):
      3. File '<pyshell#117>', line 1, in <module>
      4. abs('a')
      5. TypeError: bad operand type for abs(): 'str'
      6. >>>

      數(shù)據(jù)類型轉(zhuǎn)換

      Python 內(nèi)置的常用函數(shù)還包括數(shù)據(jù)類型轉(zhuǎn)換函數(shù),比如 int()函數(shù)可以把其他數(shù)據(jù)類型轉(zhuǎn)換為整數(shù):

      1. >>> int('321')
      2. 321
      3. >>> int(32.1)
      4. 32
      5. >>> float('12.12')
      6. 12.12
      7. >>> str(12.12)
      8. '12.12'
      9. >>> bool(1)
      10. True
      11. >>> bool(' ')
      12. True
      13. >>> bool(6)
      14. True
      15. >>>

      函數(shù)名其實就是指向一個函數(shù)對象的引用,完全可以把函數(shù)名賦給一個變量,相當(dāng)于給這個函數(shù)起了一個“別名”:

      1. >>> a = abs
      2. >>> a(-1)
      3. 1
      4. >>>

      定義函數(shù)

      在 Python 中,定義一個函數(shù)要使用 def 語句,依次寫出函數(shù)名、括號、括號中的參數(shù)和冒號:,然后,在縮進(jìn)塊中編寫函數(shù)體,函數(shù)的返回值用 return 語句返回。

      自定義一個求絕對值的 my_abs 函數(shù):

      1. >>> def my_abs(x) :
      2. if x >= 0 :
      3. return x
      4. else :
      5. return -x
      6. >>> print(my_abs(-9))
      7. 9
      8. >>>

      請注意,函數(shù)體內(nèi)部的語句在執(zhí)行時,一旦執(zhí)行到 return 時,函數(shù)就執(zhí)行完畢,并將結(jié)果返回。因此,函數(shù)內(nèi)部通過條件判斷和循環(huán)可以實現(xiàn)非常復(fù)雜的邏輯。如果沒有 return 語句,函數(shù)執(zhí)行完畢后也會返回結(jié)果,只是結(jié)果為 None。return None可以簡寫為 return。

      如果你已經(jīng)把 my_abs()的函數(shù)定義保存為 abstest.py 文件了,那么,可以在該文件的當(dāng)前目錄下啟動 Python 解釋器,用 from abstest import my_abs 來導(dǎo)入 my_abs()函數(shù),注意 abstest 是文件名(不含.py 擴(kuò)展名):

      1. >>> from abstest import my_abs
      2. >>> my_aba(-9)
      3. -9
      4. >>>

      空函數(shù)

      如果想定義一個什么事也不做的空函數(shù),可以用 pass 語句:

      1. >>> def nop():
      2. pass
      3. >>>

      pass 語句什么都不做,那有什么用?實際上 pass 可以用來作為占位符,比如現(xiàn)在還沒想好怎么寫函數(shù)的代碼,就可以先放一個 pass,讓代碼能運行起來。pass 還可以用在其他語句里,比如:

      1. >>> if age >= 20 :
      2. pass
      3. (缺少了 pass,代碼運行就會有語法錯誤。)

      參數(shù)檢查

      調(diào)用函數(shù)時,如果參數(shù)個數(shù)不對,Python 解釋器會自動檢查出來,并拋出TypeError:

      1. >>> abs('a')
      2. Traceback (most recent call last):
      3. File '<pyshell#117>', line 1, in <module>
      4. abs('a')
      5. TypeError: bad operand type for abs(): 'str'
      6. >>>

      返回多個值

      函數(shù)可以返回多個值嗎?答案是肯定的。比如在游戲中經(jīng)常需要從一個點移動到另一個點,給出坐標(biāo)、位移和角度,就可以計算出新的新的坐標(biāo):

      1. >>> import math
      2. >>> def move(x,y,step,angle=0):
      3. nx = x + step * math.cos(angle)
      4. ny = y - step * math.sin(angle)
      5. return nx,ny
      6. >>> x,y = move(100,100,60,math.pi/6)
      7. >>> print(x,y)
      8. 151.96152422706632 70.0
      9. >>>

      但其實這只是一種假象,Python 函數(shù)返回的仍然是單一值:

      1. >>> m = move(100,100,60,math.pi/6)
      2. >>> print(m)
      3. (151.96152422706632, 70.0)

      原來返回值是一個 tuple!但是,在語法上,返回一個 tuple 可以省略括號,而多個變量可以同時接收一個 tuple,按位置賦給對應(yīng)的值,所以,Python 的函數(shù)返回多值其實就是返回一個 tuple,但寫起來更方便。

      函數(shù)的參數(shù)

      定義函數(shù)的時候,把參數(shù)的名字和位置確定下來,函數(shù)的接口定義就完成了。對于函數(shù)的調(diào)用者來說,只需要知道如何傳遞正確的參數(shù),以及函數(shù)將返回什么樣的值就夠了,函數(shù)內(nèi)部的復(fù)雜邏輯被封裝起來,調(diào)用者無需了解。Python 的函數(shù)定義非常簡單,但靈活度卻非常大。除了正常定義的必選參數(shù)外,還可以使用默認(rèn)參數(shù)、可變參數(shù)和關(guān)鍵字參數(shù),使得函數(shù)定義出來的接口,不但能處理復(fù)雜的參數(shù),還可以簡化調(diào)用者的代碼。

      位置參數(shù)

      1. >>> def power(x) :
      2. return x * x
      3. >>> power(3)
      4. 9
      5. >>>

      對于 power(x)函數(shù),參數(shù) x 就是一個位置參數(shù)。當(dāng)我們調(diào)用 power 函數(shù)時,必須傳入有且僅有的一個參數(shù) x:

      那么,可以把 power(x)修改為 power(x, n),用來計算 x的n次方:

      1. >>> power(5,2)
      2. 5
      3. >>> def power(x,n):
      4. s = 1
      5. while n > 0 :
      6. n = n -1
      7. s = s*x
      8. return s
      9. >>> power(5,2)
      10. 25
      11. >>> power(3,5)
      12. 243
      13. >>>

      修改后的 power(x, n)函數(shù)有兩個參數(shù):x 和 n,這兩個參數(shù)都是位置參數(shù),調(diào)用函數(shù)時,傳入的兩個值按照位置順序依次賦給參數(shù) x 和 n。

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

      新的 power(x, n)函數(shù)定義沒有問題,但是,舊的調(diào)用代碼失敗了,原因是我們增加了一個參數(shù),導(dǎo)致舊的代碼因為缺少一個參數(shù)而無法正常調(diào)用:

      1. >>> power(2)
      2. Traceback (most recent call last):
      3. File '<pyshell#189>', line 1, in <module>
      4. power(2)
      5. TypeError: power() missing 1 required positional argument: 'n'
      6. >>>

      Python 的錯誤信息很明確:調(diào)用函數(shù) power()缺少了一個位置參數(shù) n。這個時候,默認(rèn)參數(shù)就排上用場了。由于我們經(jīng)常計算 x2,所以,完全可以把第二個參數(shù) n 的默認(rèn)值設(shè)定為 2:

      1. >>> def power(x,n = 2):
      2. s = 1
      3. while n > 0:
      4. n = n - 1
      5. s = s * x
      6. return s
      7. >>> power(2)
      8. 4
      9. >>> power(2,5)
      10. 32
      11. >>>

      從上面的例子可以看出,默認(rèn)參數(shù)可以簡化函數(shù)的調(diào)用。設(shè)置默認(rèn)參數(shù)時,有幾點要注意:

      • 一是必選參數(shù)在前,默認(rèn)參數(shù)在后,否則 Python 的解釋器會報錯(思考一下為什么默認(rèn)參數(shù)不能放在必選參數(shù)前面);
      • 二是如何設(shè)置默認(rèn)參數(shù)。

      當(dāng)函數(shù)有多個參數(shù)時,把變化大的參數(shù)放前面,變化小的參數(shù)放后面。變化小的參數(shù)就可以作為默認(rèn)參數(shù)。使用默認(rèn)參數(shù)有什么好處?最大的好處是能降低調(diào)用函數(shù)的難度。

      可變參數(shù)

      在 Python 函數(shù)中,還可以定義可變參數(shù)。顧名思義,可變參數(shù)就是傳入的參數(shù)個數(shù)是可變的,可以是 1 個、2 個到任意個,還可以是 0 個。

      以數(shù)學(xué)題為例子,給定一組數(shù)字 a,b,c……,請計算 a2 + b2 + c2 + ……。要定義出這個函數(shù),我們必須確定輸入的參數(shù)。由于參數(shù)個數(shù)不確定,首先想到可以把a,b,c……作為一個 list 或 tuple 傳進(jìn)來,這樣,函數(shù)可以定義如下:

      1. >>> def calc(nums):
      2. sum = 0
      3. for n in nums:
      4. sum = sum + n * n
      5. return sum
      6. >>> calc([1,2,3,4])
      7. 30
      1. >>> def calc(*num):
      2. sum = 0
      3. for n in num:
      4. sum += n * n
      5. return sum
      6. >>> calc (1,2)
      7. 5
      8. >>> calc(3)
      9. 9
      10. >>>

      定義可變參數(shù)和定義一個 list 或 tuple 參數(shù)相比,僅僅在參數(shù)前面加了一個*號。在函數(shù)內(nèi)部,參數(shù) numbers 接收到的是一個 tuple,因此,函數(shù)代碼完全不變。但是,調(diào)用該函數(shù)時,可以傳入任意個參數(shù),包括 0 個參數(shù):

      1. >>> calc (1,2)
      2. 5
      3. >>> calc(3)
      4. 9
      5. >>> calc()
      6. 0
      7. >>>

      *nums 表示把 nums 這個 list 的所有元素作為可變參數(shù)傳進(jìn)去。這種寫法相當(dāng)有用,而且很常見。

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

      可變參數(shù)允許你傳入 0 個或任意個參數(shù),這些可變參數(shù)在函數(shù)調(diào)用時自動組裝為一個tuple。而關(guān)鍵字參數(shù)允許你傳入 0 個或任意個含參數(shù)名的參數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個 dict。

      1. >>> def person(name,age,**kg):
      2. print('name:',name,'age:',age,'other',kg)
      3. >>> person('Jerry',20)
      4. name: Jerry age: 20 other {}
      5. >>> person('Jerry',20,city='shanghai')
      6. name: Jerry age: 20 other {'city': 'shanghai'}
      7. >>>

      函數(shù) person 除了必選參數(shù) name 和 age 外,還接受關(guān)鍵字參數(shù) kg。在調(diào)用該函數(shù)時,可以只傳入必選參數(shù):

      1. >>> person('Jerry',20,city='shanghai',job='Enginner')
      2. name: Jerry age: 20 other {'city': 'shanghai', 'job': 'Enginner'}
      3. >>>

      關(guān)鍵字參數(shù)有什么用?它可以擴(kuò)展函數(shù)的功能。比如,在 person 函數(shù)里,保證能接收到 name 和 age 這兩個參數(shù),但是,如果調(diào)用者愿意提供更多的參數(shù),也能收到。試想正在做一個用戶注冊的功能,除了用戶名和年齡是必填項外,其他都是可選項,利用關(guān)鍵字參數(shù)來定義這個函數(shù)就能滿足注冊的需求。

      **extra 表示把 extra 這個 dict 的所有 key-value 用關(guān)鍵字參數(shù)傳入到函數(shù)的**kw 參數(shù),kw 將獲得一個 dict,注意 kw 獲得的 dict 是 extra 的一份拷貝,對 kw 的改動不會影響到函數(shù)外的 extra。

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

      (待整理)

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多