美文网首页
python特殊函数

python特殊函数

作者: 冬季恋歌1218 | 来源:发表于2018-04-23 11:13 被阅读23次

    在Python中,有几个特别的函数,它们常常被看做是Python能够进行所谓“函数式编程”的见证。它们是:filter、map、reduce、lambda、yield。有了它们,可以使得程序更简洁,没有它们,程序也可以以其他方式实现,只是有些麻烦罢了。

    lambda

    lambda函数,是一个一行就能解决问题的函数。

    Python,有两种函数一种是def定义一种是lambda函数。

    定义:顾名思义,即没有函数名的函数。Lambda表达式是Python中一类特殊的定义函数的形式,使用它可以定义一个匿名函数。与其它语言不同,Python的Lambda表达式的函数体只能有唯一的一条语句,也就是返回值表达式语句。

    lambda的一般形式是关键字lambda,之后是一个或者多个参数,紧跟的是一个冒号,之后是一个表达式:

    lambda argument1 argument2 ... :expression using arguments

    lambda是一个表达式,而不是一个语句。

    lambda主体是一个单一的表达式,而不是一个代码块。

    举一个简单的例子,假如要求两个数之和,用普通函数或匿名函数如下:

    1)普通函数: def func(x,y):return x+y

    2)匿名函数: lambda x,y: x+y

    g = lambda x,y:x*y

    g(10,3) // 输出30

    1、lambda后面直接跟变量

    2、变量后面是冒号

    3、冒号后面是表达式,表达式计算结果是本函数的返回值

    虽然lambda函数可以接收任意多个参数(包括可选参数)并且返回单个表达式的值,但是lambda函数不能包含命令,包含的表达式不能超过一个。不要试图向lambda函数中塞入太多的东西;如果需要更复杂的东西,应该定义一个普通函数。

    map

    map(function ,iterable,...)

    说明:function是一个函数,iterable是一个序列对象

    1、对于iterable中 的每个元素,依次应用function的方法(函数)这本质上就是一个for循环

    2、将所有结果返回一个list

    3、如果参数很多,则那些参与并执行function。

    items = [1,2,3,4,5]

    map(lambdax:x**2,items) // 输出[1,4,9,16,25]

    lst1 = [1,2,3,4,5]

    lst2 = [6,7,8,9,10]

    map(lambda x,y:x+y,lst1,lst2)//输出[7,9,11,13,15]

    reduce

    reduce(function, iterable[ initializer])

    reduce函数格式:reduce(func, seq[, init]).

      reduce函数即为化简,它是这样一个过程:每次迭代,将上一次的迭代结果(第一次时为init的元素,如没有init则为seq的第一个元素)与下一个元素一同执行一个二元的func函数。在reduce函数中,init是可选的,如果使用,则作为第一次迭代的第一个元素使用。

      简单来说,可以用这样一个形象化的式子来说明:

      reduce(func, [1,2,3])=func(func(1,2), 3)

    举个例子来说,阶乘是一个常见的数学方法,Python中并没有给出一个阶乘的内建函数,我们可以使用reduce实现一个阶乘的代码。

    n = 5

    print reduce(lambdax, y: x * y, range(1, n + 1))     #120

    如果我们希望得到2倍阶乘的值呢?这就可以用到init这个可选参数了。

    m = 2

    n = 5

    print reduce(lambdax, y: x * y, range( 1, n + 1 ), m )     # 240

    filter

    filter(function, iterable)

    filter 的中文含义是“过滤器”,在 Python 中,它就是起到了过滤器的作用。首先看官方说明:

    numbers = range(-5,5)  #[-5, -4, -3, -2, -1,0,1,2,3,4]

    filter(lambda x:x>0,numbers) #[1,2,3,4]

    filter(lambda y:y!='u','wuxiaoxin')  #'wxiaoxin'

    装饰器(函数)

    定义:装饰器就是一函数,用来包装函数的函数,用来修饰原函数,将其重新赋值给原来的标识符,并永久的丧失原函数的引用。

    其实对装饰器的理解,我们可以根据它的名字来进行,主要有三点:

       1)首先装饰器的特点是,它将函数名作为输入(这说明装饰器是一个高阶函数);

       2)通过装饰器内部的语法将原来的函数进行加工,然后返回;

       3)原函数通过装饰器后被赋予新的功能,新函数覆盖原函数,以后再调用原函数,将会起到新的作用。

      说白了,装饰器就相当于是一个函数加工厂,可以将函数进行再加工,赋予其新的功能。

    为什么是这个结果呢?

      1)首先hello函数经过makeitalic 函数的装饰,变成了这个结果hello world

      2)然后再经过makebold函数的装饰,变成了hello world,这个理解起来很简单。

    相关文章

      网友评论

          本文标题:python特殊函数

          本文链接:https://www.haomeiwen.com/subject/jegikftx.html