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

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

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

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

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

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

請自行測試并調用my_abs看看返回結果是否正確。

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

如果沒有return語句,函數(shù)執(zhí)行完畢后也會返回結果,只是結果為None。

return None可以簡寫為return。
空函數(shù)

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

def nop():
  pass

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

pass還可以用在其他語句里,比如:

if age >= 18:
  pass

缺少了pass,代碼運行就會有語法錯誤。
參數(shù)檢查

調用函數(shù)時,如果參數(shù)個數(shù)不對,Python解釋器會自動檢查出來,并拋出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ù)類型不對,Python解釋器就無法幫我們檢查。試試my_abs和內置函數(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'

當傳入了不恰當?shù)膮?shù)時,內置函數(shù)abs會檢查出參數(shù)錯誤,而我們定義的my_abs沒有參數(shù)檢查,所以,這個函數(shù)定義不夠完善。

讓我們修改一下my_abs的定義,對參數(shù)類型做檢查,只允許整數(shù)和浮點數(shù)類型的參數(shù)。數(shù)據(jù)類型檢查可以用內置函數(shù)isinstance實現(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ù)檢查后,如果傳入錯誤的參數(shù)類型,函數(shù)就可以拋出一個錯誤:

>>> 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

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

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

比如在游戲中經(jīng)常需要從一個點移動到另一個點,給出坐標、位移和角度,就可以計算出新的新的坐標:

import math

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

這樣我們就可以同時獲得返回值:

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

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

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

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

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

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

函數(shù)體內部可以用return隨時返回函數(shù)結果;

函數(shù)執(zhí)行完畢也沒有return語句時,自動return None。

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

 

相關文章

  • Python機器學習應用之基于決策樹算法的分類預測篇

    Python機器學習應用之基于決策樹算法的分類預測篇

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

    Python使用PyNmap進行網(wǎng)絡掃描的詳細步驟

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

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

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

    Python 詳解爬取并統(tǒng)計CSDN全站熱榜標題關鍵詞詞頻流程

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

    Jupyter Notebook 遠程訪問配置詳解

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

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

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

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

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

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

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

    Python FtpLib模塊應用操作詳解

    這篇文章主要介紹了Python FtpLib模塊應用操作,結合實例形式詳細分析了FtpLib模塊的功能、配置、應用相關操作技巧與使用注意事項,需要的朋友可以參考下
    2019-12-12
  • 基于PyQt5自制簡單的文件內容檢索小工具

    基于PyQt5自制簡單的文件內容檢索小工具

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

最新評論

临桂县| 浦城县| 张家口市| 岳阳县| 唐河县| 永年县| 新化县| 砚山县| 贵阳市| 临沂市| 霍林郭勒市| 宝坻区| 西和县| 天全县| 临沂市| 廊坊市| 绿春县| 汝阳县| 富川| 石景山区| 山丹县| 通海县| 新竹县| 荣成市| 吉木乃县| 乡城县| 红安县| 江都市| 红桥区| 长乐市| 阿荣旗| 廉江市| 乌鲁木齐县| 邵阳市| 策勒县| 清新县| 韩城市| 桓仁| 泸州市| 滦平县| 绥滨县|