1. 程式人生 > >Python學習筆記(八)

Python學習筆記(八)

base 函數式編程 輸出 必須 返回 叠代 use map 作用

一、變量可以指向一個函數

  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學習筆記(八)