Python自學記錄——調用函數和定義函數

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

調用函數

在 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 打開編譯器,重新輸入讀取本地文件方法的語句,再重新輸入參數執行函數,否則會重複報一個錯,即使改變,還是報錯。

本篇結束,繼續學習~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章