python基礎(八) 函式

2022-08-27 19:36:08 字數 4482 閱讀 6385

函式就是將一些語句集合在一起的部件,他們能夠不止一次的程式中執行,函式還能夠計算出乙個返回值,並能夠改變作為函式輸入的引數。而這些引數在**執行時每次都不同。以函式的形式去編寫乙個操作可以使它成為乙個廣泛的應用工具。

基本格式:

def

函式名:

函式體return 返回值

定義函式按照前面的基本格式定義函式,呼叫函式時要使用函式名加括號來呼叫函式,括號中可以包含乙個或多個引數。這些引數將會傳遞給函式頭部的引數名。

#

定義def

test(x,y):

return x*y#呼叫

test(5,10)

func(valule)   函式呼叫時會通過位置來匹配,呼叫函式時引數不能省略。

func(name=value)  函式如果在呼叫的時候不給引數,就按預設引數的值進行傳遞,如果在呼叫函式時給預設引數重新賦值則原值會被覆蓋,

def func(name="

joe"

):

print

(name)

func()

>>>joe

func(

"austinjoe

") #

func(name="austinjoe")也是可以的

>>>austinjoe

func(*args) 將所有位置相關的引數收集到乙個新的元組之中,並將這個元組值賦值給變數args。*可以匹配任意長度和數目的引數。

def func(*args):

print

(args)

func(*(1,2,3,4))#

func(1,2,3,4)這種形式也是可以的

>>>(1, 2, 3, 4)

func([1,2,3],'

hello

','python')

>>>([1, 2, 3], '

hello

', '

python

')

2.func(**kwargs)與上面類似,但是是將引數收集到字典中。

def func(**kwargs):

print

(kwargs)

func(a=1,b=2)

>>>

func(**)

>>>

在python中我們可以用*和**對引數解包。

def

func(a,b,c,d):

print

(a,b,c,d)

args=(1,2,3,4)

func(*args)

>>>1 2 3 4

def

func(a,b,c,d):

print

(a,b,c,d)

args=

func(**args)

>>>1 2 3 4

引數型別是可以混合使用的,但必須遵循以下法則:

在函式呼叫中,引數必須以此順序出現:位置引數,後面跟著任何關鍵字引數,然後是*args,最後跟著**kwargs。

在函式頭部,引數必須以此順序出現:一般引數後面緊跟著預設引數,如果有的話後面是*args,最後是**kwargs。

lambda是乙個表示式,表示式建立了乙個之後能夠呼叫的函式,但是他返回了乙個函式而不是將這個函式賦值給變數名。

其一般格式為:

lambda:argument1,argument2··· argumentn :expression using arguments

f = lambda x, y, z: x + y +z

print(f(2, 3, 4))

>>>9

lambda表示式常常與map()和filter()函式結合使用,我們接下來就學習這兩個函式。

map函式會對乙個序列物件中的每個元素應用被傳入的函式,並且返回了包含所用函式呼叫結果的乙個列表。

l=list(map((lambda x:x+2),[1,2,3,4]))

print(l)

>>>[3, 4, 5, 6]

l=list(map(pow,[1,2,3],[5,6,7]))

print

(l)>>>[1, 64, 2187]

filter()函式會根據測試函式過濾出一些元素。

l=list(filter((lambda x:x>0),range(-10,10)))

print

(l)>>>[1, 2, 3, 4, 5, 6, 7, 8, 9]

reduce()函y數會對每乙個元素應用函式並執行到最後結果。

from functools import

reduce

result=reduce((lambda x,y:x+y),[1,2,3,4])

print

(result)

>>>10

閉包是指函式外面呼叫函式裡面的的函式,即函式巢狀。

def

main():

print("

hello world")

defnest():

print("

我是巢狀的函式!")

return

nest

#第一種形式

main()()

>>>hello world

>>>我是巢狀的函式!

#第二種形式

m=main()

m()>>>hello world

>>>我是巢狀的函式!

遞迴函式的使用要注意:

遞迴的次數在python中是有限制的;

遞迴函式使用時占用的記憶體成幾何量增長;

遞迴函式要有終止條件。

#

對乙個列表求和

defsumtree(l):

tot =0

for x in

l:

ifnot

isinstance(x, list):

tot +=x

else

: tot +=sumtree(x)

return

totl = [1, [1, 2, [6, 7], 3], 4, 5, [9, 8]]

print

(sumtree(l))

>>>46

函式a的執行取決於函式b中某一條件的執行,則函式a為**函式。

def

main(x):

if x>5:

print("

**函式未執行!!")

else

:

return

callback()

defcallback():

print("

**函式執行!!")

main(10)

>>>**函式未執行!!

main(4)

>>>**函式執行!!

作用域法則:

內嵌的模組是全域性作用域;

全域性作用域的範圍僅限於單個檔案;

每次對函式的呼叫都建立了乙個本地作用域;

賦值的變數名除非宣告為全域性變數和非本地變數,否則均為本地變數;

所有其他的變數名都可以歸納為本地,全域性或者內建的。

x=88

deffunc(y):

z=x+y

return

zprint(func(12))

#其中x和函式func都是全域性變數名,而y和z均為本地變數名

global 語句用來宣告乙個全域性或多個全域性變數名。

x = 88

deffunc():

global

x x = 99func()

print

(x)>> > 99

在宣告nonlocal變數名時,該變數名必須存在函式的巢狀的作用域,即他們只能存在於乙個巢狀的函式中,並且不能有乙個巢狀的def中的第一次賦值建立。

def

tester(start):

state =start

defnested(label):

nonlocal state

print

(label, state)

state += 1

return

nested

f =tester(0)

print(f('

first'))

>>>first 0

print(f('

second'))

>>>second 1

print(f('

third'))

>>>third 2

python基礎知識(六)函式 (八)

目錄 六 函式 八 6.1匿名函式的格式 6.2匿名函式和五個特殊的內建函式可以結合使用 6.3面試題練一練 lambda 引數,引數2 返回值表示式 def add x,y return x y add lambda x,y x y print add 1,4 匿名函式在內建函式 max 求最大值...

python基礎 函式,作用域介紹(八)

函式,函式也是乙個物件 物件是記憶體中用來儲存資料的區域。函式可以用來儲存一些可執行 並且在需要的時候對這些 多次呼叫。建立函式 def 函式名 塊 def fn print this is my first function 函式中的 塊不會直接執行,需要呼叫該函式fn 後才會執行。print f...

Python基礎語法(八)

2.lambda表示式 3.高階函式 特點 函式內部自己呼叫自己 必須有出口 def fn sum inum if inum 1 return inum return inum fn sum inum 1 print fn sum 3 輸出結果 6如果乙個函式有乙個返回值,並且只有一句 可以使用la...