Python_物件導向_高階函數

來源:互聯網
上載者:User

標籤:reverse   str   高階函數   list   函數式編程   ted   參數   編程   預設   

--高階函數:map reduce sorted filter
--函數式編程
  純粹的函數式程式設計語言編寫的函數沒有變數,允許把函數本身作為參數傳入另一個函數,允許返回一個函數,python語言部分支援
  能夠把函數當成參數傳入,這樣的函數叫高階函數,常用的有 map reduce filter sorted

# 高階函數 :能夠把函數當成參數傳入,這樣的函數叫高階函數
# 高階函數 map
"""
  map(fn,lsd)
    fn 內建函數 或者 自訂函數
    lsd 具有可迭代性的資料(容器類型資料,可迭代對象,迭代器)
    功能 把lsd中的所有資料 一一應用在fn函數中 ,
  返回迭代器

"""

# 案例1 int內建函數
listvar = ["3","5","7","9"]

diedaiqi = map(int,listvar)

 

# 案例2 myfunc自訂函數
listvar = [1,2,3,4,5]
# [1,4,9,16,25]

def myfunc(n):
  return n ** 2
res = map(myfunc,listvar)
print(res)

res = list(res)
print(res)

 

# 小練習 {1:‘a‘,2:‘b‘,3:‘c‘} [a,b,c] [1,2,3]

def zidian(keys):
  dictvar = {1:‘a‘,2:‘b‘,3:‘c‘}
  dictvar2 = {}
  for keyvar,valvar in dictvar.items():
    dictvar2[valvar] = keyvar
  return dictvar2[keys]
res = zidian(‘b‘)
print(res)

res = map(zidian,[‘a‘,‘b‘,‘c‘])
res = list(res)
print(res)

 

# 高階函數 reduce
"""
  reduce(fn,lsd)
    fn 內建函數 或者 自訂函數
    lsd 具有可迭代性的資料(容器類型資料,可迭代對象,迭代器)
    功能 先拿出lsd這個資料中的前2個值,扔到fn函數中進行運算,
      把運算的結果在和lsd中第三個元素一起放到fn函數中在進行運算,
      直到lsd所有資料都一一應用到fn函數結束,返回最終的結果

"""

# 案例1
# [5,4,8,8] 5488
listvar = [5,4,8,8]
from functools import reduce
def func(x,y):
  return x * 10 + y
res = reduce(func,listvar)
print(res)

# 案例2
# map + reduce 把"789" 轉化成 整型 789
# 通過map 把字串"789" => [7,8,9] 然後套上reduce 即可
def zhuanhua(keys):
  dictvar = {‘0‘:0,‘1‘:1,‘2‘:2,‘3‘:3,‘4‘:4,‘5‘:5,‘6‘:6,‘7‘:7,‘8‘:8,‘9‘:9}
  return dictvar[keys]

res = reduce(func,map(zhuanhua,"789"))
print(res,type(res))

 

#高階函數 sorted
"""
  sorted(lsd,reverse=False,key=函數)
    lsd 具有可迭代性的資料(容器類型資料,可迭代對象,迭代器)
    reverse 預設升序 True 代表降序
    key 可以自訂 或者 使用內建函數
  返回一個列表
"""

# 案例1 預設按照升序排列
listvar = [18,12,5,26]
res = sorted(listvar)
print(res)

# 案例2 使用降序
listvar = [18,12,5,26]
res = sorted(listvar,reverse=True)
print(res)

# 案例3
listvar = [78,-8,0,3]
res = sorted(listvar)
print(res)

# 案例4
# 把列表裡面的資料 一個一個依次通過abs轉化成絕對值之後再排序
listvar = [78,-8,0,3]
help(sorted)


res = sorted(listvar,key=abs)
print(res,type(res))


# 案例5
def ceshi001(n):
  return n % 4
"""
2302 按照餘數的大小 對原列表中的值排序,產生新的列表
"""
listvar = [22,99,88,66]
res = sorted(listvar,key=ceshi001)
print(res)

 

#高階函數 filter
"""
  filter(func,lsd)
    lsd 具有可迭代性的資料(容器類型資料,可迭代對象,迭代器)
    func 自訂的函數
    功能:用來過濾的,通過把lsd中的每一個資料依次應用在func函數中,
       如果func函數返回True ,則保留此資料,如果func函數返回False,則捨棄此資料
    返回迭代器
"""

# 案例1 過濾所有奇數 得所有偶數
listvar = [1,2,3,4,5,6,7,8,9]
def myfunc(n):
  if n % 2 == 0:
    return True
  else:
    return False

res = filter(myfunc,listvar)
# print(list(res))


# 案例2 用lambda運算式來最佳化案例1
def myfunc(n):
  func = lambda n : True if n % 2 == 0 else False
  res = func(n)
  return res

res = filter(myfunc,range(1,10))
print(list(res))

 

 

 

 

Python_物件導向_高階函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.