simple cases about functional programming

import functools


def fac(n):
    return functools.reduce(lambda a,b:a*b, range(1,n+1))


fac(5)




120

another solution is using operator module

import operator
def fact(n):
    return functools.reduce(operator.mul, range(1,n+1))


fact(5)




120




metro_data = [
    ('Tokyo', 'JP', 36.933, (35.689722, 139.691667)),
    ('Delhi NCR', 'IN', 21.935, (28.613889, 77.208889)),
    ('Mexico City', 'MX', 20.142, (19.433333, -99.133333)),
    ('New York-Newark', 'US', 20.104, (40.808611, -74.020386)),
    ('Sao Paulo', 'BR', 19.649, (-23.547778, -46.635833))
    ]


for city in sorted(metro_data, key=operator.itemgetter(1)):   # 根据国籍排序 使用itemgetter函数
    print(city)

('Sao Paulo', 'BR', 19.649, (-23.547778, -46.635833))
('Delhi NCR', 'IN', 21.935, (28.613889, 77.208889))
('Tokyo', 'JP', 36.933, (35.689722, 139.691667))
('Mexico City', 'MX', 20.142, (19.433333, -99.133333))
('New York-Newark', 'US', 20.104, (40.808611, -74.020386))



country_city_name = operator.itemgetter(1,0)  # an function get values from index 1 and 0 , then collect them in tuple
for ele in map(country_city_name, metro_data):
    print(ele)

('JP', 'Tokyo')
('IN', 'Delhi NCR')
('MX', 'Mexico City')
('US', 'New York-Newark')
('BR', 'Sao Paulo')

由于itemgetter利用了[]操作符,所以它支持任何实现了__getitem__方法的类型,不局限于序列还包括字典。
类似的还有attrgetter,它也是个函数,以属性名称(字符串类型)作为参数,创建函数,最终作用于实例对象,返回tuple类型。
任何能被.(dot)访问的属性都能被attrgetter访问。

import collections
LatLong = collections.namedtuple('LatLong', 'lat long')
Metropolis = collections.namedtuple('Metropolis', 'name cc pop coord')


metro_areas = [Metropolis(name, cc, pop, LatLong(lat, long)) for name, cc, pop, (lat, long) in metro_data]


metro_areas[0]




Metropolis(name='Tokyo', cc='JP', pop=36.933, coord=LatLong(lat=35.689722, long=139.691667))




metro_areas[0].coord.lat




35.689722




name_lat = operator.attrgetter('name','coord.lat')   # a function get attribute named 'name', 'coord.lat'
for city in sorted(metro_areas, key=operator.attrgetter('coord.lat')): # sort use the attribute 'coord.lat'
    print(name_lat(city))

('Sao Paulo', -23.547778)
('Mexico City', 19.433333)
('Delhi NCR', 28.613889)
('Tokyo', 35.689722)
('New York-Newark', 40.808611)



[name for name in dir(operator) if not name.startswith('_')]




['abs',
 'add',
 'and_',
 'attrgetter',
 'concat',
 'contains',
 'countOf',
 'delitem',
 'eq',
 'floordiv',
 'ge',
 'getitem',
 'gt',
 'iadd',
 'iand',
 'iconcat',
 'ifloordiv',
 'ilshift',
 'imod',
 'imul',
 'index',
 'indexOf',
 'inv',
 'invert',
 'ior',
 'ipow',
 'irshift',
 'is_',
 'is_not',
 'isub',
 'itemgetter',
 'itruediv',
 'ixor',
 'le',
 'length_hint',
 'lshift',
 'lt',
 'methodcaller',
 'mod',
 'mul',
 'ne',
 'neg',
 'not_',
 'or_',
 'pos',
 'pow',
 'rshift',
 'setitem',
 'sub',
 'truediv',
 'truth',
 'xor']




s = 'The time has come'


upcase = operator.methodcaller('upper') # a function
print(upcase(s))

THE TIME HAS COME



replce_maker = operator.methodcaller('replace',' ','-')
print(replce_maker(s))

The-time-has-come



 triple = functools.partial(operator.mul, 3)


triple(7)




21




list(map(triple,range(1,11)))




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




import unicodedata


nfc = functools.partial(unicodedata.normalize,'NFC')


s1 = 'café'


s2 = 'cafe\u0301'


s1




'café'




s2




'café'




s2 == s1




False




nfc(s1)




'café'




nfc(s2)




'café'




nfc(s1) == nfc(s2)




True
全部评论

相关推荐

2024-12-16 10:44
北京邮电大学 Java
之前说过如果拿到美团offer就把这么多轮的面试经验全写出来先说一下本人的经历有9个部门约面,2次拒面,4次二面挂,1次hr面挂,2次一面挂9月初做完笔试,隔了一周,优选约面了,秋招第一面,面的很差,没有准备好,手撕sql没写出来,另一道手撕写的不太好,果不其然一面挂9.30金服约面,这次面试全是八股,此时我的八股水平相当一般,每次深挖都不会,手撕是合并两个升序链表,一面寄过完国庆回来半个月美团再没约面过了知道10.20左右,SaaS部门约面这下就开启了我的噩梦循环,一面面评很不错,二面面试官问了在滴滴实习的限流的底层原理,实习的时候就没太看懂,面试的时候答的不好,但是侥幸二面过了,hr面的时候面试官问对大厂的印象,直接胡说八道了,过了三天人才库月底又面一轮到家二面问了很多场景题,答的都不太好,面试官提醒才能理清思路,面完就挂了走完这一轮面试已经11月了,11月更是噩梦循环,3次二面挂,可能因为之前有终面挂的经历面评还不错首先是美团平台,这个印象不深,自我感觉答的还可以,面试官也聊的不错,最后挂了,给面试官发邮件问了,面试官说前面的人接了offer,没有hc了遂挂然后就是我最想去的部门和base,成都的到家做营销业务的,面试很顺利,二面面试官是我的老乡,面完又开始紧张等待结果,还是挂了最后是核心本地平台做对内的系统的,可能还不如手里的保底offer,最后也不太想去,但是还是面了,二面挂,想不通时间到了12月,我的心态也是出奇的好,这个时候又陆陆续续有两个部门约面,但是心态已经很疲惫了,加上业务也不好,直接拒面了,每次来来回回都是半个月,很耽误时间,上周目前这个部门约面,一开始说周五面试,后面面试官有事又改到这周一,最后因为主管要出差,直接约面的第二天就面试了,两轮面完,第二天就oc了,谈薪没a动,但是也收到了正式offer,感觉也还能接受,剩下等等阿里和邮储就差不多签了一些面试tips1.这几次面试挂都是3天人才库,我看网上有的是长时间没有操作回的,可以问问面试官,有时候会捞回去2.美团面试是我秋招面试里最爱问八股的,一定要好好准备,问的也不难3.美团大部分技术面都有手撕,有时候会让写sql,没准备过,遇到一次寄4.很神奇每次面试碰到问最近看什么书这个问题的都挂了,感觉问这种问题就是面试官已经对你不感兴趣但是还要凑时长5.面试一定要好好准备,面了13次面试每次都有新的不会的点,一面八股居多,也看面试官,场景题最好也准备准备,普通八股是基础,一些中间件的原理也得知道6.坚持一定有好结果
甜美的牛牛在写bug:下载美团外卖没绷住
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务