lambda表达式的实质

lambda实际上是匿名方法。匿名方法意味着,不能直接调用,必须赋值或以参数形式传参。这就决定了,它充当临时工。如果想要重用这部分lambda表达式的操作,就必须将它赋值给委托。

很多时候lambda表达式多用在委托参数上,就是临时处理。

函数参数是代理类型的才允许lambda传参

//函数声明,参数为delegate类型
void Func(System.Action act){   
        act();
} 

void Func(System.Action<float> act){
        act();
} 

调用:

Func (() => {
			
		});
Func (speed => {
	Log.log("speed:"+speed);		
});
无返回值的lambda操作处理和函数本身的处理没有关系,仅仅是启动这个代理所要做的处理。


如果是有返回值的,则它的返回值,是由上下文自动识别的。

void Func(System.Func<bool> act){
		Log.log ("act="+act());
	}
Func (() => true);

有返回值如Func<T,TResult>带有返回值类型的参数,在函数体内调用该返回值参数,即代理是有返回值的情况下才会对函数体有影响。

目前我接触的大多数情况都是不带返回值的代理,即直接回调处理结果。

举例:

比较大小的操作

delegate int max(int a,int b);

max = (a,b)=> a > b ? a:b;

赋值以备用,代码简单明了。

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、付费专栏及课程。

余额充值