1、高階函數xss
一、函數名能夠賦值
二、函數名能夠做爲函數參數
三、函數名能夠做爲函數的返回值
eg:
def f1(n): return n*n def f2(a, b, f): return f(a) + f(b) # 此處f() 至關於 f1() num = f2(1, 2, f1) print(num)
>>> 5函數
2、遞歸函數spa
1.本身調用本身;
2.有一個結束條件;
eg1: 遞歸求5!code
def fat(n): if n == 1: return 1 return n*fat(n-1) print(fat(5))
>>> 120blog
eg2: 遞歸求斐波那契數列(輸入位數,輸出該位置所對應的值)遞歸
斐波那契數列: 0 1 1 2 3 5 8 13 21 34 55(從0、1開始,後面的任意一個數爲她前面兩個數的和)
def fibo(n): if n <= 1: return 1 return fibo(n-1) + fibo(n-2) print(fibo(8)) # 輸出斐波那契數列的第8個數(是從0開始計數的)
>>> 21字符串
3、內置函數字符串處理
1.all() 函數class
all() # 若是括號裏面的內容爲真,返回True,不然返回False
2.eval() 函數 import
eval() # 至關於一個計算器,在括號裏面直接輸入要計算的內容
3.filter() 函數, 至關於過濾器,不符合條件的過濾掉,返回的值是過濾後的內容
eg:
st = ['a', 'b', 'c', 'd'] def fun(a): if a != 'a': # 篩選條件 return a ret = filter(fun, st) print(list(ret))
>>> ['b', 'c', 'd']
4.map() 字符串處理
st = ['c', 'd'] def fun(a): return a + "xss" # 給列表中的每一個元素後面加上‘xss’ 而後輸出 ret = map(fun, st) print(ret) # map object的迭代器, 輸出的是存放該函數的地址 print(list(ret))
>>> <map object at 0x000001E7903B40B8>
['cxss', 'dxss']
5.reduce()函數 疊加器
from functools import reduce # 使用reduce() 要加上該調用語句 def add(x, y): return x + y print(reduce(add, range(1, 10))) # 輸出1-9相加的和
# 執行機制:取出range中的前兩個數1和2分別賦值給x和y,執行adda()函數後把結果放入range中(此時range中數變爲3 3 4 5 6 7 8 9),以此類推
6.lambda() 匿名函數
from functools import reduce # 使用reduce() 的調用語句 print(reduce(lambda x, y: x*y, range(1, 7))) # 計算6!
# 執行機制:取出range中的前兩個數1和2分別賦值給x和y,而後相乘,結果放入range中(此時range中數變爲2 3 4 5 6),以此類推
4、關鍵字 global 和 nonlocal (很少解釋,直接上例子)
eg1:
count = 10 def f(): global count # 聲明count是一個全局變量 print(count) # 若是前面不用global聲明,函數報錯->UnboundLocalError: local variable 'count' referenced before assignment
# 緣由:count變量在定義以前調用,既全局變量不能在局部被修改 count = 5 print(count) f()
>>> 10
5
eg2:
def outer(): count = 10 def inner(): nonlocal count # 局部變量用nonlocal關鍵字 聲明 count = 20 print(count) inner() print(count) outer()
>>> 20
20