對於函數,我的理解是 抽象的方法。你不需要它是內部結構是什麼樣子的,只要遵從它給你的規則來使用,就能得到想要的效果。
調用函數
在 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 。
更多函數,請查詢官網:https://docs.python.org/3/library/functions.html
定義函數
在 Python 中,定義函數要使用 def 語句,使用方式如下:
def 函數名(參數):
以絕對值函數 abs 的簡化示例如下:
輸入完成後敲擊回車,會進入下一行,若輸入完成,沒有繼續要輸入的東西了,再出現上圖示例三個點後,再敲擊下回車鍵即可。
若想先寫個空函數,留着以後使用,需要再執行方法代碼出寫 pass ,否則會報錯。正確寫法如下:
使用自己定義的函數時,有一點需要注意,在調用函數的時候,需要加括號,尤其是無參函數的時候,示例如下:
如上圖所示,在沒有寫括號時,系統報錯了,寫上括號,正常~
繼續往下,我們通過測試函數想要得到的是數字的絕對值,如果輸入字符串呢?
在這裏我發現了Python2.X 和 Python3.X 版本的區別問題,嗯,比較麻煩。。
在Python2.X裏,還用上面的那個求絕對值的測試函數,輸入字符串,得到的如下方所示:
>>> nabs('A')
'A'
而在Python3.X中,得到的如下方所示:
>>> nabs('A')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in my_abs
TypeError: unorderable types: str() >= int()
一個報錯,一個不報錯。。。介於上述結果,我決定以後大部分用自帶的代碼格式做示例。
關於Python2.X和Python3.X的版本問題,我找到一篇比較全的-->傳送門<--感興趣的可以看下,下述段落文字是百度到的:
一到2018年12月31日爲止,所有的NumPy版本都將完全支持Python2和Python3。
從2019年1月1日開始,任何新的功能版本都只支持Python3。
2020年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 打開編譯器,重新輸入讀取本地文件方法的語句,再重新輸入參數執行函數,否則會重複報一個錯,即使改變,還是報錯。
本篇結束,繼續學習~~