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