函式是一段就具有特定功能的、可重複呼叫的語句組,用函式名來表示並通過函式名進行功能呼叫,而不需要在每個執行的地方重複編寫這些語句。
函式能夠完成特定功能,與黑盒類似,對函式的使用不需要了解函式內部實現的原理,只要了解函式的輸入輸出方式即可。嚴格地說,函式是一種功能抽象。
函式表示方式
def
《函式名》
(《輸入引數》):
《函式體》
return
《返回值》
引數列表是呼叫該函式時傳遞給它的數值,可以由零個、乙個或者多個,當傳遞多個引數時,各引數採用逗號分隔,當沒有引數時也要保留小括號。
1.呼叫程式在呼叫處暫停執行
2.在呼叫時將實參複製給函式的形參
3.執行函式體語句
4.函式呼叫結束給出返回值,程式回到呼叫前的暫停處繼續執行
形參:全稱為"形式引數" 由於它不是實際存在變數,所以又稱虛擬變數。是在定義函式名和函式體的時候使用的引數,目的是用來接收呼叫該函式時傳入的引數.在呼叫函式時,實參將賦值給形參。因而,必須注意實參的個數,型別應與形參一一對應,並且實參必須要有確定的值。
實參:全稱為"實際引數"是在呼叫時傳遞給函式的引數. 實參可以是常量、變數、表示式、函式等, 無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應預先用賦值,輸入等辦法使實參獲得確定值。
b=[4
,5,6
]print
(b)def
test
(d):
#定義函式test,其中d為形參
b=[7
,8,9
]print
("函式內部變數"
,b)print
("輸入引數"
,d,"並用0替換4"
) d[0]
=0defmain()
:print
("全域性變數b"
,b)print
("現在呼叫函式test輸入b"
) test(b)
#呼叫函式test,其中賦值給函式的b,就是實參
print
("函式呼叫結束"
)print
("全域性變數b"
,b)
main(
)
引數預設值:在函式定義時,如果有些引數存在預設值,即部分引數不一定需要呼叫程式輸入,可以在定義函式時直接為這些引數指定預設值。當函式被呼叫時,如果沒有傳遞對應的引數值,則使用函式定義時的預設值替代。
可選引數:由於函式呼叫時需要按順序輸入引數,可選引數必須定義在非可選引數的後面。(例如該形參已有預設值,函式呼叫時可以不輸入引數值,所以該形參為可選引數)
可變數量引數:在函式定義時們可以設計可變數量引數,通過在引數前面增加星號(*)實現。帶有星號的可變數量引數只能出現在引數列表的最後。
def
test
(a,d=1,
*c):
《函式體》
'''其中d是帶預設值的引數,如果呼叫函式時不賦值給b,那麼b預設等於1
*c是可變數量引數,它可以是零個或者多個輸入,可變數量引數只能出現在引數列表的最後
'''
傳遞方式:函式呼叫時,實參預設採用按照位置順序的方式傳遞給函式。同時,python提供了按照形參名稱輸入實參的方式,由於呼叫函式時指定了引數名稱,所以引數之間的順序可以任意調整。
全域性變數:全域性變數是指在函式之外定義的變數,一般沒有縮排,在程式執行全過程有效。
區域性變數:指在函式內部使用的變數,只作用函式內部,函式一但結束,該變數即得到釋放,即使函式多次呼叫,函式之間互不影響。
列表:列表的賦值和傳遞,僅僅是產生列表的乙個新的引用。即,列表在記憶體中只有存在乙個,對於該列表對其它地方賦值或者傳遞,只是對該記憶體的乙個新的引用。所以,在函式中,列表有點類似全域性變數。傳遞進函式內部進行計算的列表,對於該列表,只要函式中對列表進行修改了,該列表就修改了,函式外部的該列表也就修改了。
b=[4
,5,6
]#全域性變數
print
(b)#列印全域性變數b
deftest
(d):
#定義函式test,輸入全域性變數b
b=[7
,8,9
]#區域性變數b
print
("函式內部變數"
,b)print
("輸入引數"
,d,"並用0替換4"
) d[0]
=0defmain()
:print
("全域性變數b"
,b)print
("現在呼叫函式test輸入b"
) test(b)
print
("函式呼叫結束"
)print
("全域性變數b"
,b)#函式內部改變列表b,函式外部列表b發生改變
main(
)
函式作為一種**封裝,可以被其他程式呼叫,當然,也可以被函式內部**呼叫,也就是函式呼叫函式本身。這種函式定義中呼叫函式自身的方式稱之為遞迴。
遞迴的兩個關鍵特徵:
1.存在乙個或多個基例,基例不需要再次遞迴,他是確定的表示式。
2.所有遞迴鏈要以乙個或多個基例結尾
(遞迴函式是由限制的,當滿足某個條件時結束遞迴呼叫,即遞迴函式不可以無限呼叫自身)
import turtle
pi=3.1415926
#定義π
defastep
(long
,direction,angle)
:#畫一條線,輸入線的長度,之後的方向狀態
turtle.pendown(
) turtle.fd(
long
)if direction==1:
turtle.right(angle)
else
: turtle.left(angle)
turtle.penup(
)def
analyse
(n,l=
800)
:#n邊形,計算多邊形內角
angle=
(n-2)*
180/n
angle=
180-angle
long
=l/n
d=l/pi/
2 x=
pow(
pow(d,2)
/2,0.5
) turtle.goto(
-x,x)
for i in
range
(n):
astep(
long,1
,angle,
)def
setwin
(wid=
800,hig=
600,startx=
200,starty=
200,psize=
5,pcolor=
"black"):
#視窗初始化設定
turtle.setup(wid,hig,startx,starty)
turtle.pensize(psize)
turtle.pencolor(pcolor)
turtle.speed(1)
turtle.penup(
)def
infor()
:#使用者需求資訊收集
n=eval
(input
("請輸入多邊形邊數(大於2且是整數):"))
r=eval
(input
("請輸入多邊形周長,不確定時請輸入「0」"))
return n,r
defmain()
:#主函式
n,r=infor(
) setwin(
)if r==0:
analyse(n)
else
: analyse(n,r)
main(
)
Python基礎 函式
函式設計原則 函式有多種方法獲得輸入產生輸出,一般使用引數作為輸入,return語句配合可變引數的改變作為輸出。函式輸入 函式輸出 def fun args returndef語句 def建立了乙個函式物件並將其賦值給乙個變數。def語句是實時執行的,在模組匯入時執行或者在互動模式下輸入時執行。始終...
python基礎 函式
def funcname params return value 如果沒有return 最後會返回none,如果只寫return 會返回none 返回值個數為乙個,但是可以返回tuple,表面上返回多個值 def f1 return x,y x,y f1 def nop passdef functe...
Python 函式基礎
定義 函式是指將一組語句的集合通過乙個名字 函式名 封裝起來,要想執行這個函式,只需呼叫其函式名即可 為什麼使用函式 減少重複 使程式變的可擴充套件使程式變得易維護 1 定義乙個函式 2def func 使用def關鍵字定義函式 接函式名,括號內可以傳遞引數 3print hello world 函...