遞迴函式
直接或間接地呼叫自身以進行迴圈的函式
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成員變數中是隨機值 但是增加了...