Python自學記錄 呼叫函式和定義函式

2021-08-21 04:03:28 字數 3769 閱讀 9802

對於函式,我的理解是 抽象的方法。你不需要它是內部結構是什麼樣子的,只要遵從它給你的規則來使用,就能得到想要的效果。

在 python 中,有很多內建的函式供我們呼叫,常用的函式如下:

help(obj)

幫助,解釋傳入的obj

type(obj)

檢視傳入obj的型別

callable(obj)

檢視obj是否可以像函式被呼叫

isinstance(obj,cls)

檢視obj的資料型別是否符合cls中的資料型別

chr(i)

把乙個 ascii 數值變成字元

ord(i)

把乙個字元變成 ascii數值

str(obj)

把obj的資料格式轉換成字串

list(seq)

把乙個序列轉成 list

tuple(seq)

把乙個序列轉成 tuple

dict(list)

把 list 轉為 dict , 要求 list 型別:[ ['key',value],['key',value]]

int(x)

把傳入的值轉成整型

bool(x)

把傳入的值轉成布林型

float(x)

把傳入的值轉成浮點型

hex(x)

把整數x變成十六進製制表示的字串

max(seq)

返回序列中最大的數

min(seq)

返回序列中最小的數

abs(x)

把傳入的值轉成絕對值

help的示例如下:

其他函式使用示例如下:

同上,其他函式使用示例如下:

函式是可以起別名的,比如,絕對值函式 abs ,起別名為 jd ,示例如下:

解釋一下,上述**中,定義了乙個變數 jd ,並把變數指向 abs 函式,所以可以通過 jd 呼叫函式 abs 。

在 python 中,定義函式要使用 def 語句,使用方式如下:

def 函式名(引數):
以絕對值函式 abs 的簡化示例如下:

輸入完成後敲擊回車,會進入下一行,若輸入完成,沒有繼續要輸入的東西了,再出現上圖示例三個點後,再敲擊下回車鍵即可。

若想先寫個空函式,留著以後使用,需要再執行方法**出寫 pass ,否則會報錯。正確寫法如下:

使用自己定義的函式時,有一點需要注意,在呼叫函式的時候,需要加括號,尤其是無參函式的時候,示例如下:

如上圖所示,在沒有寫括號時,系統報錯了,寫上括號,正常~

繼續往下,我們通過測試函式想要得到的是數字的絕對值,如果輸入字串呢?

在這裡我發現了python2.x 和 python3.x 版本的區別問題,嗯,比較麻煩。。

在python2.x裡,還用上面的那個求絕對值的測試函式,輸入字串,得到的如下方所示:

>>> nabs('a')

'a'

而在python3.x中,得到的如下方所示:

>>> nabs('a')

traceback (most recent call last):

file "", line 1, in file "", line 2, in my_abs

typeerror: unorderable types: str() >= int()

乙個報錯,乙個不報錯。。。介於上述結果,我決定以後大部分用自帶的**格式做示例。

關於python2.x和python3.x的版本問題,我找到一篇比較全的-->傳送門

一到2023年12月31日為止,所有的numpy版本都將完全支援python2和python3。 

從2023年1月1日開始,任何新的功能版本都只支援python3。

2023年1月1日,我們將結束對python2支援版本最後的社群支援。

為了完善測試的絕對值函式,我們需要加乙個判斷,若輸入的不是數字,告訴使用者,傳參傳錯了,示例如下:

如上圖所示,其中 if not  是將後面判斷的結果取反,比如:條件是 2>1,應該返回的true ,使用 if not 返回的就是 false ;

isinstance是判斷傳入資料型別的函式,判斷傳入值得資料型別是否符合 int 或 float ;

raise 是當程式出現錯誤,手動丟擲異常。一旦執行了 raise 語句,raise 後面的語句將不能執行。typeerror 是python 自帶的常見的異常型別。異常的相關問題,後文會有專門的一篇來說明。完成後會在此處加鏈結。

在 python 中,函式可以返回多個值,但返回的方式是以 tuple 來實現的。在 python 語法中,返回乙個 tuple 可以省略括號,而多變數可以同時接受乙個 tuple,按照位置賦值,所以說,返回多個引數其實是返回乙個 tuple,這樣寫比較方便。

如果,你已經把函式定義儲存為 .py 的檔案了,儲存時一定要儲存在 python 安裝同一路徑下。呼叫 .py 裡的函式,如下所示: 

>>>from myabs import my_abs

>>>my_abs(-100)

100

其中,from 後面的第乙個位置上的是 .py 的檔名,import 後面的是呼叫的函式名,連起來是 取 myabs.py 檔案中的 my_abs 方法。呼叫成功後,直接輸入呼叫的函式名就可正常使用函式。

下面寫乙個 解  一元二次方程 的示例,有很多不完善,相互學習:

import math

def abss(a,b,c):

if (math.pow(b,2)-4*a*c)<0:

return 'error'

else:

x1 = (-b+math.sqrt(math.pow(b,2)+-4*a*c))/2*a

x2 = (-b-math.sqrt(math.pow(b,2)+-4*a*c))/2*a

if x1 == x2:

return ('x only one,x='+str(x1))

else:

return('x1='+str(x1)+' ,x2='+str(x2))

執行結果如下圖:

如上,返回的是字串。測試除錯時需注意,在軟體中改好後,執行一遍出錯後,一定要先用 exit() 關閉當前cpython編譯器,再在cmd 上輸入python 開啟編譯器,重新輸入讀取本地檔案方法的語句,再重新輸入引數執行函式,否則會重複報乙個錯,即使改變,還是報錯。

本篇結束,繼續學習~~

Python 函式呼叫效能記錄

之前用 js 寫專案的時候,專案組用的元件模式,一直感覺很不錯。最近用 python 做新專案,專案結構也延續了元件模式。一直沒有對函式呼叫的效能作了解,今天突發奇想測試了一下,寫了一些測試 首先定義了幾個 class class a object deftest self pass class b...

自學python記錄1

上次參加個學校的功放大賽,裡面有乙個關於提取ip並計算所有埠號是80的ip位址的總和,但不計算埠號,最終我們小組的同學用c完成了這道大題,但答疑的時候學長說用python會容易很多,this讓我想到了去年功放題裡面的那個進製轉換的題,資料龐大得驚人,本準備用c寫的,但後來發現越界了,無奈之下只能用計...

matlab呼叫python函式記錄一

記錄下,避免以後花時間搜尋 環境配置 遇到的問題 1 pytorch版本問題 當前matlab 2018b 仍舊不支援pytorch 0.4以上,試了google 上的一些方法,和大多一樣仍不能解決問題,因此,將pytorch版本降低為0.3.1,問題解決 示例 python指令碼 test.py ...