Python學習筆記(八)
一、變量可以指向一個函數
a = abs
二、通過調用指向函數的變量可以執行該函數
a = abs
a(-10)
三、指向函數的變量可以作為參數傳遞給一個函數
def add(x,y,f):
return f(x) + f(y)
add(-5,-6,abs)
四、map()函數
map() 函數可以為其傳入一個函數以及一個可Iterator的對象,map將使用該函數依次作用於每個Iterator的元素
list1 = [ x for x in range(1,11)]
def fun(x):
return x + 1
list2 = map(fun,list1)
五、reduce()函數
reduce()函數接收一個函數和一個Iterator對象,但接收的函數有兩個變量,並依次每次叠代列表中的兩個元素
六、filter()函數
filter()函數也是一個高階函數,其有兩個參數,分別是函數和可Iterator對象,並將函數依次作用於這個list的每個元素,根據函數返回True和False來對列表進行相關的操作
#使用filter()函數來輸出一個列表中所有的奇數:
list1 = [ x for x in range(1,101)]
def is_odd(x):
if x % 2 != 0:
return True
else:
return False
list2 = list(is_odd,list1)
七、sorted()函數
sorted()函數可以用作排序
sorted(可遍歷對象)
sorted(可遍歷對象, key=abs ) #按照每個元素的abs進行排序
sorted(可遍歷對象, key=abs , reverse = True) #按照每個元素的abs進行排序並且反轉
八、函數的返回與閉包
函數也可以作為值返回
閉包是函數式編程中函數作為第一等公民的一種組織方式
def welcome(welcome_str):
def say_hello(user_name):
return welcome_str + user_name
return say_hello
say_hello_fun = welcome("你好")
str = say_hello_fun("CQ")
print(str)
九、創建閉包時的規範
閉包必須有內嵌函數
內嵌函數需要引用該嵌套函數上一級namespace中的變量
閉包函數必須返回內嵌函數
十、閉包函數中的執行和調用問題
第一步:通過最外稱函數獲取內嵌函數
第二步:通過構造內嵌函數參數來獲取返回的執行結果
十一、匿名函數
Python中通過lambda提供了對匿名函數的支持
lambda 參數 : 參數參與的表達式
lambda表達式只能有一句表達式,並且直接將該表達式的執行結果返回,而不用書寫return語句
lambda表達式可以直接賦值給一個變量,再通過變量來構造函數來實現調用
fun = lambda x : x * x
fun(5)
十二、裝飾器
裝飾器是在不破壞原有函數功能基礎上,為函數新增功能的一種機制
def test1(fun):
def test2(*k,**kv):
print("now",fun.__name__,"is run"):
return fun(*k)
return test2
@test1
def test(user_name):
print("Hello,",user_name)
test("CQ") #這裏是調用執行
十三、偏函數
通過偏函數,可以方便的新建一個函數,並使其原函數參數有固定的默認值
import functools
int2 = functools.partial(int,base=2)
int2(‘1000‘)
functools.partial(原函數,原函數的默認值)
Python學習筆記(八)