就像中學所學的一樣,也可以稱之為「方法」,可以用來解決各種數學計算或者實現切合實際的功能,例如計算圓的面積 s=pi*r*r,只要知道半徑,什麼圓的面積都可以計算出來。
這就是一種抽象,再舉個栗子:
計算數列的和:1+2+3+…+100,可以抽象記成:
而電腦程式也是一樣,函式就是一種最基本的一種**抽象的方式。
在 python 中,定義乙個函式要使用 def 語句,依次寫出函式名、括號、括號中的引數和冒號:,然後,在縮排塊中編寫函式體,函式的返回值用 return 語句返回。舉例:
def my_abs(x):
if x >= 0:
return x
else:
return -x
函式體內部的語句在執行到 return 時,函式就執行完畢並將結果返回,如果沒有 return語句也會返回,只不過返回結果是 none。 return none 可以簡寫為 return。
什麼都不做的函式,只是作為佔位符,讓**可以正常執行,以後有什麼功能可以新增進去。
def nop():
pass
而 pass 語句還可以放在其它語句裡面,也是佔位:
if age >= 18:
pass
在寫完函式之後,我們可以進行呼叫。而 python 也內建了不少的函式,呼叫時需要知道函式的名稱和引數。內建函式自行官網,不熟的可以 help(【函式名】)。例如呼叫絕對值函式,最大值函式,型別轉換函式:
>>> abs(100)
100
>>> abs(-20)
20 >>> max(2, 3, 1, -5)
3 >>> int(『123』)
123
當輸入的函式引數數量不對,或者型別不對,python 將會爆出相應錯誤。
而函式名其實也是乙個指向函式物件的引用,完全可以把函式名賦給乙個變數,相當於起了個「別名」:
>>> a = abs # 變數 a 指向 abs 函式
>>> a(-1) # 所以也可以通過 a 呼叫 abs 函式
1 當函式的引數數量不對的時候, python 直譯器會自動檢查出來並丟擲 typeerror:
>>> my_abs(1, 2)
traceback (most recent call last):
file 「」, line 1, in
typeerror: my_abs() takes 1 positional argument but 2 were given
但是引數的型別不對,直譯器就沒法進行檢查,除了早已編寫過型別異常檢查的內建函式。而自己編寫時,資料型別檢查可以用內建函式 isinstance() 實現:
def my_abs(x):
if not 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
python 的函式是可以返回多個值的,例如在遊戲中經常需要從乙個點移動到另乙個點,給出座標、位移和角度,就可以計算出新的座標:
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
然後我們可以同時獲得返回值:
>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print(x, y)
151.96152422706632 70.0
但這是假象,python 返回的還是乙個單一的值:
>>> r = move(100, 100, 60, math.pi / 6)
>>> print(r)
(151.96152422706632, 70.0)
沒錯,python 返回的是乙個 tuple,語法上返回的 tuple 可以省略括號,而多個變數可以同時接收乙個 tuple,按位置賦給對應的值。
演算法基礎(上)
演算法 algorithm 是指解題方 而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制,簡單來說就是解決問題的步驟 演算法特徵 有窮性 確切性 輸入項 輸出項 可行性特徵 含義有窮性 演算法在執行有限個步驟之後終止 確切性演算法的每一步必須有確切的定義 輸入...
python 入門筆記 語法基礎 上
寫在前面 ide visual studio code 以下原始碼均可直接執行,python其實對於學過c 或c語言的人來說是比較好上手的,主要差別是python更注重格式縮排之類,其表達法甚至比c語言還靈活 目錄 字串方法 常見函式及其使用 格式化字串if語句練習elif語句練習列表和下標列表簡單...
WS BPEL語言基礎(上)
16.1.ws bpel語言基礎 在我們能夠設計編排層之前,我們需要很好地理解如何正式地表達流程的操作特徵。本書使用ws bpel語言來演示流程邏輯如何能夠被作為具體定義的一部分來描述 圖16.1 從而能夠通過相適應的編排引擎來實現和執行。圖16.1.常見的ws bpel流程定義結構 雖然你很可能會...