99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

Python進(jìn)階之函數(shù)式編程詳解

發(fā)布時間:2017-02-21 15:16  回復(fù):0  查看:2274   最后回復(fù):2017-02-21 15:16  
本文和大家分享的主要是 python開發(fā)中函數(shù)式編程相關(guān)內(nèi)容,一起來看看吧,希望對大家學(xué)習(xí)和使用這部分內(nèi)容有所幫助。
   1. python把函數(shù)作為參數(shù)
   import math def  add(x, y, f):
   return f(x) + f(y)
   print add(-5, 9, abs) print abs(-5) + abs(9) print add(25, 9, math.sqrt)
   2. pythonmap()函數(shù)
  map() 是  Python  內(nèi)置的高階函數(shù),它接收一個函數(shù)  和一個  list ,并通過把函數(shù)  依次作用在  list  的每個元素上,得到一個新的  list  并返回。
   def  format_name(s):
   return s[0].upper() + s[1:].lower()
   print map(format_name, ['adam', 'LISA', 'barT'])
   3.pythonreduce()函數(shù)
  reduce() 函數(shù)也是 Python 內(nèi)置的一個高階函數(shù)。 reduce() 函數(shù)接收的參數(shù)和  map() 類似,一個函數(shù)  f ,一個 list ,但行為和  map() 不同, reduce() 傳入的函數(shù)  必須接收兩個參數(shù), reduce() list 的每個元素反復(fù)調(diào)用函數(shù) f ,并返回最終結(jié)果值。
   def  f(x, y):
   return x + y
   print reduce(f, [1, 3, 5, 7, 9]) # 25
   def  prod(x, y):
   return x * y print reduce(prod, [2, 4, 5, 7, 12]) # 3360
   4.pythonfilter()函數(shù)
  filter() 函數(shù)是  Python  內(nèi)置的另一個有用的高階函數(shù), filter() 函數(shù)接收一個函數(shù)  和一個 list ,這個函數(shù)  的作用是對每個元素進(jìn)行判斷,返回  True 或  False , filter() 根據(jù)判斷結(jié)果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新 list 。
   def  is_odd(x):
   return x % 2 == 1 print filter(is_odd, [1, 4, 6, 7, 9, 12, 17]) # [1, 7, 9, 17]
   def  is_not_empty(s):
   return s  and len(s.strip()) > 0 print filter(is_not_empty, ['test',  None, '', 'str', ' ', 'END']) # ['test', 'str', 'END']
   import math def  is_sqr(x):
  r = int(math.sqrt(x))
   return r*r==x print filter(is_sqr, range(1, 101)) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
   5.python中自定義排序函數(shù)
  sorted() 是一個高階函數(shù),它可以接收一個比較函數(shù)來實現(xiàn)自定義排序,比較函數(shù)的定義是,傳入兩個待比較的元素  x, y ,如果  x 應(yīng)該排在  的前面,返回  -1 ,如果  應(yīng)該排在  的后面,返回  1 。如果  和  相等,返回  0
   print sorted([36, 5, 12, 9, 21]) # [5, 9, 12, 21, 36]
   def  reversed_cmp(x, y):
   if x > y:
   return -1
   if x < y:
   return 1
   return 0 print sorted([36, 5, 12, 9, 21], reversed_cmp) # [36, 21, 12, 9, 5]
   print sorted(['bob', 'about', 'Zoo', 'Credit']) # ['Credit', 'Zoo', 'about', 'bob']
   def  cmp_ignore_case(s1, s2):
  u1 = s1.upper()
  u2 = s2.upper()
   if u1 < u2:
   return -1
   if u1 > u2:
   return 1
   return 0 print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case) # ['about', 'bob', 'Credit', 'Zoo']
   6.python中返回函數(shù)
  Python 的函數(shù)不但可以返回 int 、 str 、 list dict 等數(shù)據(jù)類型,還可以返回函數(shù)!
   def  calc_sum(lst):
   def  lazy_sum():
   return sum(lst)
   return lazy_sum
   print f # print f() # 10
   def  calc_prod(lst):
   def  lazy_prod():
   def  f(x, y):
   return x * y
   return reduce(f, lst, 1)
   return lazy_prod
  f = calc_prod([1, 2, 3, 4]) print f() # 24
   7.python中閉包
   def  count():
  fs = []
   for i  in range(1, 4):
   def  f():
   return i*i
  fs.append(f)
   return fs
  f1, f2, f3= count() print f1() # 9 print f2() # 9 print f3() # 9
   def  count():
  fs = []
   for i  in range(1, 4):
   def  f(j):
   def  g():
   return j*j
   return g
  r = f(i)
  fs.append(r)
   return fs
  f1, f2, f3 = count() print f1(), f2(), f3() # 1 4 9
   8.python中匿名函數(shù)
  高階函數(shù)可以接收函數(shù)做參數(shù),有些時候,我們不需要顯式地定義函數(shù),直接傳入匿名函數(shù)更方便。
   print map( lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]) # [1, 4, 9, 16, 25, 36, 49, 64, 81]
   print sorted([1, 3, 9, 5, 0],  lambda x,y: -cmp(x,y)) # [9, 5, 3, 1, 0]
  myabs =  lambda x: -x  if x < 0  else x  print myabs(-1) # 1 print myabs(1) # 1
   print filter( lambda s: s  and len(s.strip())>0, ['test',  None, '', 'str', ' ', 'END']) # ['test', 'str', 'END']
   9. pythondecorator裝飾器
  什么是裝飾器?
  ·  問題:
  ·  定義一個函數(shù)
  ·  想在運行時動態(tài)增加功能
  ·  又不想改動函數(shù)本身的代碼
  裝飾器的作用
  ·  可以極大地簡化代碼,避免每個函數(shù)編寫重復(fù)性代碼
  ·  打印日志: @log
  ·  檢測性能: @performance
  ·  數(shù)據(jù)庫事務(wù): @transaction
  · URL 路由: @post('/register')
   9-1. python中編寫無參數(shù)decorator
  Python 的  decorator  本質(zhì)上就是一個高階函數(shù),它接收一個函數(shù)作為參數(shù),然后,返回一個新函數(shù)。
   def  log(f):
   def  fn(x):
   print 'call ' + f.__name__ + '()...' # call factorial()...
   return f(x)
   return fn
  @log def  factorial(n):
   return reduce( lambda x,y: x*y, range(1, n+1)) print factorial(10) # 3628800
   print '\n'
   import time def  performance(f):
   def  fn(*args, **kw):
  t1 = time.time()
  r = f(*args, **kw)
  t2 = time.time()
   print 'call %s() in %fs' % (f.__name__, (t2 - t1)) # call factorial() in 0.001343s
   return r
   return fn
  @performance def  factorial(n):
   return reduce( lambda x,y: x*y, range(1, n+1)) print factorial(10) # 3628800
   9-2. python中編寫帶參數(shù)decorator
   import time def  performance(unit):
   def  perf_decorator(f):
   def  wrapper(*args, **kw):
  t1 = time.time()
  r = f(*args, **kw)
  t2 = time.time()
  t = (t2 - t1) * 1000  if unit=='ms'  else (t2 - t1)
   print 'call %s() in %f %s' % (f.__name__, t, unit) # call factorial() in 1.250982 ms
   return r
   return wrapper
   return perf_decorator
  @performance('ms') def  factorial(n):
   return reduce( lambda x,y: x*y, range(1, n+1)) print factorial(10) # 3628800
   9-3. python中完善decorator
  @decorator 可以動態(tài)實現(xiàn)函數(shù)功能的增加,但是,經(jīng)過
  @decorator“ 改造 后的函數(shù),和原函數(shù)相比,除了功能多一點外,有沒有其它不同的地方?
   def  f1(x):
   passprint f1.__name__ # f1
   def  log(f):
   def  wrapper(*args, **kw):
   print 'call...'
   return f(*args, **kw)
   return wrapper@log def  f2(x):
   passprint f2.__name__ # wrapper
   import time, functools def  performance(unit):
   def  perf_decorator(f): @functools.wraps(f)
   def  wrapper(*args, **kw):
  t1 = time.time()
  r = f(*args, **kw)
  t2 = time.time()
  t = (t2 - t1) * 1000  if unit=='ms'  else (t2 - t1)
   print 'call %s() in %f %s' % (f.__name__, t, unit)
   return r
   return wrapper
   return perf_decorator
  @performance('ms') def  factorial(n):
   return reduce( lambda x,y: x*y, range(1, n+1)) print factorial.__name__ # factorial
   10. python中偏函數(shù)
  當(dāng)一個函數(shù)有很多參數(shù)時,調(diào)用者就需要提供多個參數(shù)。如果減少參數(shù)個數(shù),就可以簡化調(diào)用者的負(fù)擔(dān)。
   import functools
  sorted_ignore_case = functools.partial(sorted, cmp=lambda s1, s2: cmp(s1.upper(), s2.upper()))print sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit']) # ['about', 'bob', 'Credit', 'Zoo']
來源: 博客園
您還未登錄,請先登錄

熱門帖子

最新帖子

?