日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 函数式编程包_python 函数支持函数式编程的包operator partial

發布時間:2024/7/5 python 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 函数式编程包_python 函数支持函数式编程的包operator partial 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

itemgetter和attrgetter能替代從序列中取出元素或讀取對象屬性的lambda表達式,會自動構建函數

itemgetter

1,根據元組某個字段給元組列表排序,下例中

itemgetter(1) == lambda field : field[1]

2,如果把多個參數傳給itemgetter ,它構建的函數會返回提取的值構成元組

metro_data = [

("tykyo",'jp',36.944,(35.68944,139.69166)),

("delhi ncr",'in',21.935,(36.64944,138.79166)),

("mexico city",'mx',46.944,(33.68944,129.69166)),

("new york-newark",'us',20.944,(35.68944,139.69166)),

("sao paulo",'br',16.944,(25.68944,149.69166))

]

#1

from operator import itemgetter

for city in sorted(metro_data,key=itemgetter(1)):

print(city)

#2

cc_name=itemgetter(1,0)

for city in metro_data:

print(cc_name(city))

返回:

('sao paulo', 'br', 16.944, (25.68944, 149.69166))

('delhi ncr', 'in', 21.935, (36.64944, 138.79166))

('tykyo', 'jp', 36.944, (35.68944, 139.69166))

('mexico city', 'mx', 46.944, (33.68944, 129.69166))

('new york-newark', 'us', 20.944, (35.68944, 139.69166))

-------------------------------------------------------------------------------------

('jp', 'tykyo')

('in', 'delhi ncr')

('mx', 'mexico city')

('us', 'new york-newark')

('br', 'sao paulo')

attrgetter它創建的函數根據名稱提取對象的屬性

metro_data = [

("tykyo",'jp',36.944,(35.68944,139.69166)),

("delhi ncr",'in',21.935,(36.64944,138.79166)),

("mexico city",'mx',46.944,(33.68944,129.69166)),

("new york-newark",'us',20.944,(35.68944,139.69166)),

("sao paulo",'br',16.944,(25.68944,149.69166))

]

from operator import itemgetter

from collections import namedtuple

LatLong = namedtuple('LatLong','lat long')#定義LatLong

Metropolis = namedtuple('Metropolis','name cc pop coord')#定義Metropolis

#使用嵌套的元祖拆包提取(Lat,Long)

Metro_areas = [Metropolis(name,cc,pop,LatLong(Lat,Long)) for name,cc,pop,(Lat,Long) in metro_data]

print(Metro_areas)

print(Metro_areas[0])

print(Metro_areas[0].coord)

print(Metro_areas[0].coord.lat)

from operator import attrgetter

name_lat = attrgetter('name','coord.lat')

for city in sorted(Metro_areas,key=attrgetter('coord.lat')):

print(name_lat(city))

返回:

[Metropolis(name='tykyo', cc='jp', pop=36.944, coord=LatLong(lat=35.68944, long=139.69166)), Metropolis(name='delhi ncr', cc='in', pop=21.935, coord=LatLong(lat=36.64944, long=138.79166)), Metropolis(name='mexico city', cc='mx', pop=46.944, coord=LatLong(lat=33.68944, long=129.69166)), Metropolis(name='new york-newark', cc='us', pop=20.944, coord=LatLong(lat=35.68944, long=139.69166)), Metropolis(name='sao paulo', cc='br', pop=16.944, coord=LatLong(lat=25.68944, long=149.69166))]

Metropolis(name='tykyo', cc='jp', pop=36.944, coord=LatLong(lat=35.68944, long=139.69166))

LatLong(lat=35.68944, long=139.69166)

35.68944

('sao paulo', 25.68944)

('mexico city', 33.68944)

('tykyo', 35.68944)

('new york-newark', 35.68944)

('delhi ncr', 36.64944)

functools.partial

:凍結參數

:基于一個函數創建一個新的可調用對象,把原函數的某些參數固定,使用這個函數可以吧接受一個或多個參數的函數改編成需要回調的API,這樣參數更少

from operator import mul

from functools import partial

triple = partial(mul,3)

print(triple(7))

l = list(map(triple,range(1,10)))

print(l)

返回:

21

[3, 6, 9, 12, 15, 18, 21, 24, 27]

def tag(name,*content,cls=None,**attrs):

if cls is not None:

attrs['class'] = cls

if attrs:

attrs_str = ''.join(' %s="%s" ' % (attr,value) for attr,value in sorted(attrs.items()))

else:

attrs_str=''

if content:

return '\n'.join('<%s %s >%s%s>' % (name,attrs_str,c,name) for c in content)

else:

return '<%s%s />' % (name,attrs_str)

from functools import partial

picture = partial(tag,'img',cls='pic-frame')

print(picture)

p = picture(src='sunlong.jpeg')

print(p)

print(picture.args)

print(picture.keywords)

返回:

functools.partial(, 'img', cls='pic-frame')

('img',)

{'cls': 'pic-frame'}

總結

以上是生活随笔為你收集整理的python 函数式编程包_python 函数支持函数式编程的包operator partial的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。