函式3 高階話題

2022-07-28 01:03:09 字數 2075 閱讀 3950

遞迴函式

直接或間接地呼叫自身以進行迴圈的函式

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

def sumtree(l):

t = 0

for i in l:

if not isinstance(i,list):

t += i

else:

t += sumtree(i)

return t

sumtree(l)

函式間接呼叫
#將函式名賦值給其他變數

def func(x):

print(x)

a = func

b = a

c = b

c(1)

print(c.__name__)

#結果:

1func

函式的屬性
def func(x):

pass

print(dir(func))

func.count = 0

func.count += 1

print(func.count) # 1

print(dir(func)) # 多了乙個「count」屬性

匿名函式lambda

lambda是乙個表示式,而不是乙個語句。因為這一點,lambda能出現在不允許def出現的地方,例如,在乙個列表常量中或函式呼叫的引數中。lambda返回了乙個新的函式,可以選擇性地賦值給乙個變數名。def語句必須在頭部將新的函式賦值給乙個變數名(即函式名),而不是將這個函式作為結果返回。

​ lambda的主體是乙個單個的表示式,而不是乙個**塊。簡單地將結果寫成乙個表示式,而不是明確的返回。

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

print(f(1,2,3)) # 6

l =[lambda x:x*2,lambda x:x*3,lambda x:x*4]

for f in l:

print(f(1),end = ' ') #結果:2 3 4

#lambda巢狀

f=lambda x:lambda y:x+y

f(1)(2)

高階函式

符合下列乙個條件:

接受乙個或多個函式作為輸入(引數)

輸出(返回)乙個函式

兩個重要內建函式map和filter

​ 對映函式map(function,iterable)

​ map有兩引數,第乙個引數為函式,第二個引數為可迭代物件,map的作用:iterable中的每一項元素作為function的引數,並返回乙個含有所有執行結果的可迭代物件。

def func(x):

return x+1

l = [1,2,3]

res = map(func,l)

print(list(res)) #[2,3,4]

lambda與map

ret = map(lambda x:x+1,[i for i in range(1,4)])

print(list(ret)) # #[2,3,4]

filter

filter(function or none, iterable) --> 返回乙個迭代器,該迭代器生成那些函式(項)為true的iterable項。如果函式為none,則返回為true的項。

res = filter(none,[0,3,''])

print(list(res))

#結果:

[3]# -----------------------------

def fun(n):

return n % 2

res = filter(fun,range(0,5))

print(list(res))

#結果:

[1,3]

八 高階話題

本章描述bufferevent的一些對通常使用不必要的高階特徵。如果只想學習如何使用bufferevent,可以跳過這一章,直接閱讀下一章。有時候網路程式需要與自身通訊。比如說,通過某些協議對使用者連線進行隧道操作的程式,有時候也需要通過同樣的協議對自身的連線進行隧道操作。當然,可以通過開啟乙個到自...

高階指標話題

來淺顯地 一下稍微複雜的指標.首先要有乙個不可動搖地認識,再厲害的指標也是指標,它存的內容永遠是位址.定義了指標的型別,該指標就只能與這種型別搭配使用.從二級指標開始說 int i int p i int pp p pp是乙個二級指標,指向指標的指標,存的內容是p的位址,型別是 指向整型的指標的指標...

記憶體高階話題

18.1 new,delete的進一步認識 18.1.1 總述與回顧 記憶體有關的高階用法,如記憶體池等 18.1.2 從new說起 new類物件時,加與不加括號的差別 a pa newa 帶號的寫法,類a的成員變數被初始化為0 a pa2 new a 這種寫法,m i成員變數中是隨機值 但是增加了...