python基礎之函式

2021-09-24 02:39:03 字數 2294 閱讀 5369

在任何一門程式語言中,函式都是非常重要的乙個部分,當然python裡也不例外。不過python裡函式也會有一些額外的擴充,比如巢狀函式, 閉包和現在很多程式設計

語言都有的lambda表示式。

先來看一下python裡正常函式的樣子:

a =

1def

func

(num)

:print

(num+a)

函式裡可以直接訪問全域性變數,但是如果要修改全域性變數的話,則需要使用global關鍵字。

a =

1def

func

(num)

:global a

a +=

1print

(num+a)

python語言裡支援巢狀函式,相當於在函式裡像定義乙個臨時變數一樣定義乙個臨時函式,它只能在函式內部訪問。

def

func()

:print

('in func'

)def

func_innr()

:print

('in func_innr'

) func_innr(

)func(

)

這段**的輸出結果是:

in func

in func_innr

這就是巢狀函式的樣子,其實就是定義了乙個臨時的函式。巢狀函式的作用有兩個,一是保證內部函式的一些隱私不會曝露,二是可以提高函式執行效率。

def

connect_db()

:def

get_config()

:...

return username, passwd

conn = connect(get_config())

return conn

像這種寫法,get_config()函式就無法在外部訪問,從而不會讓使用者名稱和密碼隨意曝露。

def

sum(input_num):if

notisinstance

(input_num,

int)

:raise exception(

'input is not int'

)if input_num <0:

raise exception(

'input must be bigger than 0'

)def

inner_sum

(input_sum)

:if input_sum ==1:

return

1return input_sum + inner_sum(input_sum -1)

return inner_sum(input_num)

print

(sum(5

))

這段**是完成乙個累加求和的功能,通過定義乙個內嵌函式完成,而外部函式只做一次引數檢查,inner_sum裡就不需要每次做引數型別檢查,就會保證只讓

核心的**進行遞迴。

閉包和內嵌函式很類似,唯一的區別是,內嵌函式像函式一樣仍然返回的是乙個值,而閉包需要返回內嵌的函式。

def

func

(a, b)

:def

line

(x):

return a * x + b

return line

line_res = func(2,

3)print

(line_res(1)

)

這是乙個直線方程,通過外部函式傳入斜率和截距,然後返回乙個斜率和截距固定的函式。閉包通常和python裡的裝飾器一起配合使用。

lambda表示式也叫匿名函式,python裡的lambda表示式的形式如下:

lambda x : x+

1

lambda表示式在python中有非常廣泛的使用,對於一些只需要使用一次的臨時函式,我們就不必要定義乙個函式,而是直接使用lambda表示式代替。

l =

map(

lambda x:x*2,

[1,2

,3,4

,5])

# map返回的是乙個可迭代的物件,需要使用list()轉換成列表

print

(list

(l))

python之函式基礎

python 函式 python函式可以返回多值 defadd dif x,y,sum x y dif x y return sum,dif a,b add dif 2,3 print a,b 5 1 r add dif 2,3 print r 5,1 本質來說返回多值的函式其實返回乙個元組tupl...

Python基礎之函式

不同型別的引數的優先順序 在引數列表中的順序 def testfunc1 pass這是乙個最簡單的函式,沒有引數,沒有返回,pass表示該函式沒有做任何操作,testfunc1是函式名,def是關鍵字,表示這是乙個函式 呼叫函式時給出函式並給函式傳遞相應的引數,對於命名關鍵字引數需要給出引數名,位置...

Python之函式(基礎)

1.函式的定義 1 函式的定義與呼叫 定義函式 def say hello print hello1 print hello2 print hello3 呼叫函式,函式只有被呼叫了才會有輸出值 示例1 定義求和函式 計算 20 30 2 函式的巢狀 def fun1 print world def ...