zoukankan      html  css  js  c++  java
  • lambda表达式在python和c++中的异同

           Lambda表达式是干么的?.lambda表达式首先是一个表达式,是一个函数对象一个匿名函数,但不是函数。现在流行语言例如:JS、PHP都支持一种和面向过程、面向对象并列的函数式编程,lambda就是一种函数式编程,以函数的形式出现,但是是一个表达式。C++11与时俱进,加入了lambda表达式。在python里面也有这个表达式,分析一下他们的区别。首先分析一下C++方面。

    C++:

       一、 形式:[ ] () mutable exception -> int {}   (中间依次是可修改标识符、错误抛出标识符、函数返回值。一般{}内自动默认,可忽略。)

         1、[ ],lambda表达式开始的标志,不可省略;第二个作用是传递参数。 

              空:表示没有使用任何函数对象参数;

         =:函数体{}内可以使用lambda所在范围内的所有局部变量,并且是值传递方式;

              &:也是所有范围内的所有局部变量,并且是引用传递方式;

        this:函数体内可以使用lambda所在类的成员变量;

        a(变量):将a按值进行传递,但是是const的拷贝,不能修改。显示加上mutable就可以修改了;

             &a:按引用传递;

        = &a:除了a引用传递,其他按值;等等。。。。

         2、():传递参数,与普通函数传参类似,在下面的关于lambda算法(二)中应用比较多因为需要外界传递参数进来,可省略。

         3、{}函数体,里面是函数体;   

    auto f = [i]{return 42+i;};
    cout <<f()<<endl;        //lambda的调用方式和普通函数的调用方式一样;函数调用运算符()

     二、 lambda算法

          1、调用find_if  

    //获取一个迭代器,指向第一个满足size()>=sz的元素
    auto wc=find_if(words.begin(),words.end(),
                 [sz](const string &a)
                        {return a.size()>=sz;});            
    

      2、for_each对迭代器范围内的元素,都执行一遍lambda表达式;

    1 for_each(wc,words.end(),
    2              [](const string &s){cout<<s<<" ";});
    3 cout<<endl;

         参考c++ primer

    三、应用场景举例:

        在QT的信号与槽里面,lambda表达式当做槽函数,此时不用再声明了,直接在实现文件里面实现槽函数用来捕捉信号,非常方便!!!

    python:

    一、lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。冒号前是参数,冒号后是返回值

          调用的时候,用()传入参数

          

       一种常见问题:

         

            输出结果13,13,并非期望的7,8
            解析:fun为一个函数数组,i为全局变量,即为9。fun[3](4)指调用fun中第3个函数(每个函数其实都是一样的),n赋值为4(()用来传入参数),所以结果为13。同理可得fun[4](4)值为13。
    二、应用场景举例:lambda和def的区别
            lambda表达式可以出现在Python语法不允许def出现的地方;
            lambda表达式返回一个值;
       lambda用来编写简单的函数,不会再重复利用的函数;
       而def用来处理强大的任务。

     总结:

        Lambda表达式,是一种函数式编程思想方法。C++ 相当于重载了lambda这个函数名称,利用函数对象起了一个函数的作用。二者只是名字一样、代表的编程思想一样,形式上没有啥相似

  • 相关阅读:
    搭建selenium+python自动化环境
    编写函数计算一个数字的长度
    编写函数digit(num, k),函数功能是:求整数num从右边开始的第k位数字的值,如果num位数不足k位则返回0。
    求m-n之间数字的和
    编写一个函数,生成4位数字的验证码
    编写一个函数,在页面上输出一个N行M列的表格,表格内容填充0~100的随机数字
    编写一个函数,计算三个数字的大小,按从小到大的顺序输出
    编写函数,判断一个字符串的内容是不是纯数字
    编写函数,求圆的面积
    编写一个函数,计算两个数字的和差积商
  • 原文地址:https://www.cnblogs.com/huangfuyuan/p/9135505.html
Copyright © 2011-2022 走看看