最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中自定義函數(shù)的教程

 更新時(shí)間:2015年04月27日 09:49:39   作者:廖雪峰  
這篇文章主要介紹了簡(jiǎn)單講解Python中內(nèi)置函數(shù)的使用,函數(shù)的使用是Python學(xué)習(xí)當(dāng)中的基本功,需要的朋友可以參考下

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

我們以自定義一個(gè)求絕對(duì)值的my_abs函數(shù)為例:

def my_abs(x):
  if x >= 0:
    return x
  else:
    return -x

請(qǐng)自行測(cè)試并調(diào)用my_abs看看返回結(jié)果是否正確。

請(qǐng)注意,函數(shù)體內(nèi)部的語(yǔ)句在執(zhí)行時(shí),一旦執(zhí)行到return時(shí),函數(shù)就執(zhí)行完畢,并將結(jié)果返回。因此,函數(shù)內(nèi)部通過(guò)條件判斷和循環(huán)可以實(shí)現(xiàn)非常復(fù)雜的邏輯。

如果沒(méi)有return語(yǔ)句,函數(shù)執(zhí)行完畢后也會(huì)返回結(jié)果,只是結(jié)果為None。

return None可以簡(jiǎn)寫(xiě)為return。
空函數(shù)

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

def nop():
  pass

pass語(yǔ)句什么都不做,那有什么用?實(shí)際上pass可以用來(lái)作為占位符,比如現(xiàn)在還沒(méi)想好怎么寫(xiě)函數(shù)的代碼,就可以先放一個(gè)pass,讓代碼能運(yùn)行起來(lái)。

pass還可以用在其他語(yǔ)句里,比如:

if age >= 18:
  pass

缺少了pass,代碼運(yùn)行就會(huì)有語(yǔ)法錯(cuò)誤。
參數(shù)檢查

調(diào)用函數(shù)時(shí),如果參數(shù)個(gè)數(shù)不對(duì),Python解釋器會(huì)自動(dòng)檢查出來(lái),并拋出TypeError:

>>> my_abs(1, 2)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: my_abs() takes exactly 1 argument (2 given)

但是如果參數(shù)類(lèi)型不對(duì),Python解釋器就無(wú)法幫我們檢查。試試my_abs和內(nèi)置函數(shù)abs的差別:

>>> my_abs('A')
'A'
>>> abs('A')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): 'str'

當(dāng)傳入了不恰當(dāng)?shù)膮?shù)時(shí),內(nèi)置函數(shù)abs會(huì)檢查出參數(shù)錯(cuò)誤,而我們定義的my_abs沒(méi)有參數(shù)檢查,所以,這個(gè)函數(shù)定義不夠完善。

讓我們修改一下my_abs的定義,對(duì)參數(shù)類(lèi)型做檢查,只允許整數(shù)和浮點(diǎn)數(shù)類(lèi)型的參數(shù)。數(shù)據(jù)類(lèi)型檢查可以用內(nèi)置函數(shù)isinstance實(shí)現(xiàn):

def my_abs(x):
  if not isinstance(x, (int, float)):
    raise TypeError('bad operand type')
  if x >= 0:
    return x
  else:
    return -x

添加了參數(shù)檢查后,如果傳入錯(cuò)誤的參數(shù)類(lèi)型,函數(shù)就可以拋出一個(gè)錯(cuò)誤:

>>> my_abs('A')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "<stdin>", line 3, in my_abs
TypeError: bad operand type

錯(cuò)誤和異常處理將在后續(xù)講到。
返回多個(gè)值

函數(shù)可以返回多個(gè)值嗎?答案是肯定的。

比如在游戲中經(jīng)常需要從一個(gè)點(diǎn)移動(dòng)到另一個(gè)點(diǎn),給出坐標(biāo)、位移和角度,就可以計(jì)算出新的新的坐標(biāo):

import math

def move(x, y, step, angle=0):
  nx = x + step * math.cos(angle)
  ny = y - step * math.sin(angle)
  return nx, ny

這樣我們就可以同時(shí)獲得返回值:

>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print x, y
151.961524227 70.0

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

>>> r = move(100, 100, 60, math.pi / 6)
>>> print r
(151.96152422706632, 70.0)

原來(lái)返回值是一個(gè)tuple!但是,在語(yǔ)法上,返回一個(gè)tuple可以省略括號(hào),而多個(gè)變量可以同時(shí)接收一個(gè)tuple,按位置賦給對(duì)應(yīng)的值,所以,Python的函數(shù)返回多值其實(shí)就是返回一個(gè)tuple,但寫(xiě)起來(lái)更方便。
小結(jié)

定義函數(shù)時(shí),需要確定函數(shù)名和參數(shù)個(gè)數(shù);

如果有必要,可以先對(duì)參數(shù)的數(shù)據(jù)類(lèi)型做檢查;

函數(shù)體內(nèi)部可以用return隨時(shí)返回函數(shù)結(jié)果;

函數(shù)執(zhí)行完畢也沒(méi)有return語(yǔ)句時(shí),自動(dòng)return None。

函數(shù)可以同時(shí)返回多個(gè)值,但其實(shí)就是一個(gè)tuple。

 

相關(guān)文章

  • Python機(jī)器學(xué)習(xí)應(yīng)用之基于決策樹(shù)算法的分類(lèi)預(yù)測(cè)篇

    Python機(jī)器學(xué)習(xí)應(yīng)用之基于決策樹(shù)算法的分類(lèi)預(yù)測(cè)篇

    所謂決策樹(shù),就是一個(gè)類(lèi)似于流程圖的樹(shù)形結(jié)構(gòu),樹(shù)內(nèi)部的每一個(gè)節(jié)點(diǎn)代表的是對(duì)一個(gè)特征的測(cè)試,樹(shù)的分支代表該特征的每一個(gè)測(cè)試結(jié)果,而樹(shù)的每一個(gè)葉子節(jié)點(diǎn)代表一個(gè)類(lèi)別。樹(shù)的最高層是就是根節(jié)點(diǎn)
    2022-01-01
  • Python使用PyNmap進(jìn)行網(wǎng)絡(luò)掃描的詳細(xì)步驟

    Python使用PyNmap進(jìn)行網(wǎng)絡(luò)掃描的詳細(xì)步驟

    使用 PyNmap 進(jìn)行網(wǎng)絡(luò)掃描是一個(gè)非常有效的方式,PyNmap 是 Nmap 工具的一個(gè) Python 封裝,它允許你在 Python 腳本中使用 Nmap 的強(qiáng)大功能,本文介紹了如何使用 PyNmap 進(jìn)行網(wǎng)絡(luò)掃描的詳細(xì)步驟,需要的朋友可以參考下
    2024-08-08
  • Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫(kù)實(shí)例

    Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫(kù)實(shí)例

    這篇文章主要介紹了Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫(kù)實(shí)例,本文直接給出操作mysql代碼實(shí)例,包含創(chuàng)建表、插入數(shù)據(jù)、插入多條數(shù)據(jù)、查詢(xún)數(shù)據(jù)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Python 詳解爬取并統(tǒng)計(jì)CSDN全站熱榜標(biāo)題關(guān)鍵詞詞頻流程

    Python 詳解爬取并統(tǒng)計(jì)CSDN全站熱榜標(biāo)題關(guān)鍵詞詞頻流程

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python爬取CSDN全站綜合熱榜標(biāo)題,順便統(tǒng)計(jì)關(guān)鍵詞詞頻,大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • Jupyter Notebook 遠(yuǎn)程訪問(wèn)配置詳解

    Jupyter Notebook 遠(yuǎn)程訪問(wèn)配置詳解

    這篇文章主要介紹了Jupyter Notebook 遠(yuǎn)程訪問(wèn)配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python 中的int()函數(shù)怎么用

    python 中的int()函數(shù)怎么用

    int() 函數(shù)用于將一個(gè)字符串會(huì)數(shù)字轉(zhuǎn)換為整型。接下來(lái)通過(guò)本文給大家介紹python 中的int()函數(shù)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2017-10-10
  • Python3批量生成帶logo的二維碼方法

    Python3批量生成帶logo的二維碼方法

    今天小編就為大家分享一篇Python3批量生成帶logo的二維碼方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • Python 代碼在函數(shù)中運(yùn)行得更快的原因解析

    Python 代碼在函數(shù)中運(yùn)行得更快的原因解析

    我們知道,python 是一種解釋型語(yǔ)言,它會(huì)逐行讀取并執(zhí)行代碼,小伙伴們可能會(huì)有這個(gè)疑問(wèn):為什么在函數(shù)中運(yùn)行的 Python 代碼速度更快,今天這篇文章將會(huì)解答大家心中的疑惑
    2023-09-09
  • Python FtpLib模塊應(yīng)用操作詳解

    Python FtpLib模塊應(yīng)用操作詳解

    這篇文章主要介紹了Python FtpLib模塊應(yīng)用操作,結(jié)合實(shí)例形式詳細(xì)分析了FtpLib模塊的功能、配置、應(yīng)用相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • 基于PyQt5自制簡(jiǎn)單的文件內(nèi)容檢索小工具

    基于PyQt5自制簡(jiǎn)單的文件內(nèi)容檢索小工具

    這篇文章主要為大家詳細(xì)介紹了如何基于PyQt5自制一個(gè)簡(jiǎn)單的文件內(nèi)容檢索小工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-05-05

最新評(píng)論

永寿县| 德阳市| 武乡县| 锦屏县| 开化县| 喜德县| 晴隆县| 保德县| 如东县| 五大连池市| 会昌县| 同江市| 高雄市| 清苑县| 奇台县| 怀集县| 兴文县| 利川市| 崇阳县| 绩溪县| 渑池县| 大安市| 新乐市| 上蔡县| 浑源县| 霍城县| 诸城市| 鄂托克前旗| 武强县| 宜宾县| 股票| 浙江省| 介休市| 安仁县| 沙雅县| 永安市| 岳普湖县| 芦溪县| 都兰县| 仁寿县| 家居|