高中生零基礎學python(五)

2021-10-25 02:16:18 字數 3954 閱讀 3450

上篇我們說到,python中內建了很多函式,我們可以直接呼叫的出來,那我我們能不能自己「創作」乙個函式呢?

sure!讓我們試試看

首先,我們要知道怎麼去定義乙個函式

在python中,定義乙個函式要使用def語句,依次寫出函式名、括號、括號中的引數和冒號:,然後,在縮排塊中編寫函式體,函式的返回值用return語句返回。

以乙個求絕對值的函式my_abs為例子

def

my_abs

(x):

if x >=0:

return x

else

:return

-x

讓我們輸乙個數值來測試一下

print

(my_abs(-10

))

10
結果正確!

注意!!函式體內部一旦執行到return的時候就執行完畢了,並會將結果返回,所以你會發現你在這個過程中加入input()並沒有用,那麼什麼情況下我們可以輸入呢?

在python互動環境中你可以這樣做

如果你已經把my_abs()的函式定義儲存為abstest.py檔案了,那麼,可以在該檔案的當前目錄下啟動python直譯器,用fromabstest import my_abs來匯入my_abs()函式,注意abstest是檔名(不含.py副檔名)

什麼是空函式?就是啥也沒有唄,這個函式什麼都不用做,那麼這個空函式的存在的意義是什麼?

def

abc():

pass

就像有的時候你寫作文,有段文字還沒想好怎麼寫,這時候你就會留著空,pass語句就是幹這個活的!.

當然pass也可以用在其他語句裡,比如:

while n>

0pass

缺少了pass,**執行就會出現語法錯誤

>>

> my_abs(1,

2)traceback (most recent call last)

: file ""

, line 1,in

typeerror: my_abs(

) takes 1 positional argument but 2 were given

如果換成引數型別呢?

>>

> my_abs(

'a')

traceback (most recent call last)

: file ""

, line 1,in

file ""

, line 2

,in my_abs

typeerror: unorderable types:

str(

)>=

int(

)

很顯然,python直譯器無法幫我們檢查錯誤,反觀內建函式abs

>>

>

abs(

'a')

traceback (most recent call last)

: file ""

, line 1,in

typeerror: bad operand type

forabs()

:'str'

是可以檢查出來是引數型別出錯

當傳入了不恰當的引數時,內建函式abs會檢查出引數錯誤,而我們定義的my_abs沒有引數檢查,會導致if語句出錯,出錯資訊和abs不一樣。所以,這個函式定義不夠完善。

那讓我們來完善它吧!首先,我們要修改的就是函式的定義,讓python直譯器可以對引數型別做檢查

只允許整數和浮點數型別的引數。資料型別檢查可以用內建函式isinstance()實現:

def

my_abs

(x):

ifnot

isinstance

(x,(

int,

float))

:raise typeerror(

'bad operand type'

)if x >=0:

return x

else

:return

-x

新增了引數檢查後,如果輸入了錯誤的引數型別,函式就可以丟擲乙個確定的錯誤:

>>

> my_abs(

'a')

traceback (most recent call last)

: file ""

, line 1,in

file ""

, line 3

,in my_abs

typeerror: bad operand type

函式可以返回多個值嗎?當然可以。

就像我們在遊戲裡要從乙個點移動到另乙個點,會有橫軸和縱軸座標數值的變化。

給出當前點的座標,以及我們位移的距離和位移的角度就可以計算新的座標

import math

defmove

(x, y, step, angle=0)

: nx = x + step * math.cos(angle)

ny = y - step * math.sin(angle)

return nx, ny

import math語句表示匯入math包,並允許後續**引用math包裡的sincos等函式。

然後,我們就得到獲得返回值啦:

>>

> x, y = move(

100,

100,

60, math.pi /6)

#math.pi是圓周率的數值

>>

>

print

(x, y)

151.96152422706632

70.0

不過,注意!這是一塊鍍了金的鐵,是假象!python函式返回的仍然是單一值。

>>

> r = move(

100,

100,

60, math.pi /6)

>>

>

print

(r)(

151.96152422706632

,70.0

)

明白了吧,這是乙個tuple(元組)!

在語法上,返回乙個tuple可以省略括號,而多個變數可以同時接收乙個tuple,按位置賦給對應的值,所以,python的函式返回多值其實就是返回乙個tuple,但寫起來更方便。

今天的學習就止於此啦,大家晚安!

高中生零基礎學python(六)

今天我們要學習的是函式的引數 例如,我們寫乙個計算x2的函式 def power x return x x對於函式,引數就是乙個位置引數x 當我們呼叫函式的時候,就只能傳入乙個引數x power 2 4 power 10 100如果我們要計算x3,x4怎麼辦呢?當然,你可以重新再定義乙個函式,but...

高中生零基礎下python(十八)

回顧一下我們這兩天學的高階函式 map 函式可以將傳入的函式作用到序列的每個元素並作為新的iterator返回 reduce 函式把乙個函式作用在乙個序列 x1,x2,x3,上,這個函式必須接收兩個引數,reduce把結果繼續和序列的下乙個元素做累積計算 filter 的作用是從乙個序列中篩出符合條...

零基礎學Python

零基礎學python 1 1 python是一門指令碼語言 2 python的優勢 1 語法和結構比較簡單,易入門 2 能夠跨平台使用 3 應用範圍廣,設計到作業系統 3d動畫 web 雲計算,企業應用等多方面。3 idle 是乙個python shell,類似於windows的cmd視窗 4 pr...