24H免费课程咨询  TEL:13401595960   QQ:1870218756  微信:13401595960(李老师)

东方博宜

网站首页 > 软件开发资讯 > 安卓开发

【常州安卓开发培训班】有趣的Python 函数式编程入门

2018-05-29 10:00:51 东方博宜 阅读

reduce的使用


与map一样,reduce(function, iterable)也接收两个参数,第一个参数代表的是接收一个函数,第二个参数代表的是接收一个iteralbe类型的对象,比如list。不过不同的地方在于reduce中的这个函数必须要接收两个参数,下面我们来通过求一个list(列表)累加和的例子来了解一下reduce的用法。


from functools import reduce

# 使用lambda定义一个函数,函数的作用是接收两个参数,然后返回两个参数之和

>>> function = lambda x, y: x+y

>>> iterable = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 函数function每次接收两个参数,除第一次外每次从iterable中取一个元素作为一个参数

# 另外一个参数取自上一次function返回的值

>>> reduce(function,  iterable)

45


filter的使用


和map/reduce类似,filter(function, iterable)一次也接收两个参数,一个参数是函数,另外一个参数是iterable对象,从名字也可以看出,filter用于过滤iterble对象,比如说list(列表)。


它的原理是每次从iterable对象中取出一个元素作用于我们的function,如果function返回True就保留该元素,如果返回False就删除该元素。下面我们通过一个实例来看一下filter的用法。


# 定义一个函数,如果接收的字符s为空,那么返回False,如果为非空,那么返回True

>>> function = lambda s : s and s.strip()

>>> iterable = ['AJ', ' ', 'Stussy', '', 'CLOT', 'FCB', None]

>>> filter(function, iterable)

<filter at 0x7fcb562319b0>

>>> list(filter(function, iterable))

['AJ', 'Stussy', 'CLOT', 'FCB']


装饰器


装饰器(decorator)是一种高级Python语法。装饰器可以对一个函数、方法或者类进行加工。合理地使用装饰器可以减少我们的代码量以及提高程序的可读型,在很多Python框架中,比如Django中我们可以大量看到装饰器的身影。


>>> def add(x, y):

...     return x + y

...

>>> def multiply(x, y):

...     return x * y

...


现在我们有上面两个函数,分别用来求加法和乘法,但是现在我们觉得功能不够,想在返回结果前添加一些输出语句,一般来说我们要重构两个函数,就向下面这样。


>>> def add(x, y):

...     print("input:", x, y)

...     return x + y

...

>>> def multiply(x, y):

...     print("input:", x, y)

...     return x * y

...


如果使用装饰器我们可以像下面这样做,虽然现在我们这种情形看起来使用装饰器并没有什么优势,但是如果我们要添加的不止一条打印功能,以及除了add/multiply我们还有minus/divide等函数,这个时候装饰器的威力就体现出来了,我们只用修改一处代码即可,这样不仅提高了程序的可读性而且也为以后我们重构代码省去了很多的工作量。


def decorator(F):

    def new_function(x, y):

        print("input:", x, y)

        return F(x, y)

    return new_function

@decorator

def add(x, y):

    return x + y

@decorator

def multiply(x, y):

    return x * y

常州东方博宜是一家专注IT,互联网,电脑方面的顶尖培训机构,欢迎社会及院校有志互联网营销,搜索引擎营销的人士,来东方博宜报名学习,互相交流。

常州东方博宜地址:常州天宁区延陵西路2号工人文化宫5号楼

2.新北区太湖东路9-4号常州创意园E12


Powered by 东方博宜教育咨询江苏有限公司  ©2008-2018 www.czos.cn