lambda表达式的本质

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LambdaSpace
{
    public delegate void NoReturnWithPara(int x, int y);
    class LambdaTest
    {
        public static void Show()
        {
            NoReturnWithPara method0 = new NoReturnWithPara(ShowSth);//.net1.1最原始的方法

            NoReturnWithPara method1 = ShowSth;//简写的方法

            NoReturnWithPara method2 = new NoReturnWithPara(
                delegate(int x, int y)
                {
                    Console.WriteLine("delegate show sth");
                }
                );//匿名方法的写法。很有用,有些回调函数可以

            NoReturnWithPara method3 = new NoReturnWithPara(
                (int x, int y)=>//箭头左边是参数,右边是方法体
                {
                    Console.WriteLine("lambda show sth");
                }
                );//.net 3.0之后出现了lambda表达式

            NoReturnWithPara method4 = new NoReturnWithPara(
                (x, y) =>                           
                    Console.WriteLine("lambda show sth")
                
                );//由于委托的严格显示,参数前面的类型也可以却掉;
                  //如果方法体只有一行,大括号和分号也可以去掉

            NoReturnWithPara method5 =
                (x, y) =>
                Console.WriteLine("lambda show sth")
                ;            //由于委托的严格显示,new一个委托类型的部分也可以去掉


            //整理后得到如下的一行
            NoReturnWithPara method6 = (x, y) => Console.WriteLine("lambda show sth");

            //调用
            method6(3, 4);

            //综上所诉,lambda表达式的本质就是一个匿名方法
        }

        private static void ShowSth(int x, int y)
        {
            Console.WriteLine("show sth");
        }
    }
}

Lambda 表达式是一种简洁的方式来定义匿名函数,即没有名字的内联函数。这种语法糖使得我们可以快速创建简单的、一次性使用的功能模块而不需要正式声明完整的函数结构。下面详细介绍 Lambda 表达式的实质及其特点。 ### 实质 1. **匿名函数**: Lambda 表达式本质上是一个无名函数对象,它可以接收任意数量的参数但只能返回单一表达式的值。这意味着它非常适合用来表示那些只需要简单运算而不必单独命名的情况。 ```python # 使用lambda表达式计算两个数相加的结果 add = lambda x, y: x + y print(add(5, 3)) # 输出8 ``` 2. **闭包特性**: 如果你在 Lambda 表达式内部引用了外部作用域中的变量,则该表达式会在创建时捕获这些变量形成闭包环境。这允许我们在后续调用期间保持对外围数据的记忆。 ```python multiplier = 4 multiply_by_four = lambda n: n * multiplier result = multiply_by_four(6) # 结果为24 print(result) ``` 3. **高阶函数的应用**: Lambda 经常作为其他函数(特别是涉及迭代工具链或过滤映射操作的地方)的一个参数传递进去。由于它们非常简练,所以特别适合于这类场景下的一次性回调使用场合。 ```python numbers = [1, 2, 3, 4] squared_numbers = list(map(lambda x: x**2, numbers)) print(squared_numbers) # 输出[1, 4, 9, 16] ``` ### 特点 - **紧凑书写风格**: 相较于传统定义方法,Lambda 表达式的语法更为精炼直观,减少了不必要的冗余信息。 - **限制性较强**: 因为其设计初衷是为了处理较为基础的问题,因此不允许包含复杂的控制流语句(如if-else分支判断或者循环体构造)。 - **灵活性不足**: 当遇到更复杂的需求时,还是建议采用常规的方式去构建具名函数以增强代码可读性和维护难度。 总而言之,Lambda 表达式为我们提供了一种便捷途径来快速生成小型实用的功能块,并且在特定情境里极大地提高了编码效率。然而需要注意的是,在追求简约美观的同时也要兼顾到程序的整体质量以及长远发展的考量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值