lambda表达式范例学习

Python Lambda 函数详解
本文深入探讨了Python中Lambda函数的定义、语法及应用实例,包括作为排序关键字、过滤条件和映射操作的使用场景,展示了其简洁性和功能性。

lambda函数又称匿名函数,同样有输入和输出,通常作为嵌套函数用,看起来代码更加pythonic。

用法:lambda [parameters]: expression

Python官方手册解释:

An anonymous inline function consisting of a single expression which is evaluated when the function is called.The syntax to create a lambda function is lambda [parameters]: expression

网友总结:

lambda的用法统一是: lambda argument_list: expression
lambda x, y: xy;函数输入是x和y,输出是它们的积xy lambda:None;函数没有输入参数,输出是None
lambda *args: sum(args); 输入是任意个数的参数,输出是它们的和(隐性要求是输入参数必须能够进行加法运算)
lambda **kwargs: 1;输入是任意键值对参数,输出是1
参考:https://blog.youkuaiyun.com/zjuxsl/article/details/79437563

以下为使用示例:
示例1:

>>> data = [('red', 5), ('blue', 1), ('yellow', 8), ('black', 0)]
>>> data.sort(key=lambda r: r[1])
>>> keys = [r[1] for r in data] # precomputed list of keys
>>> data[bisect_left(keys, 0)]
('black', 0)
>>> data[bisect_left(keys, 1)]
('blue', 1)
>>> data[bisect_left(keys, 5)]
('red', 5)
>>> data[bisect_left(keys, 8)]
('yellow', 8)

示例2:

dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1
filterfalse(lambda x: x%2,range(10)) --> 0 2 4 6 8
takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4

示例3:

lambda x, y: x+y, [1, 2, 3, 4, 5])
con.text_factory = lambda x: x.decode("utf-8") + "foo"
side_effect = lambda value: value + 1

示例4:

  for i in range(n_bulk_repeats):
        start = time.time()
        estimator.predict(X_test)
        runtimes[i] = time.time() - start
    runtimes = np.array(list(map(lambda x: x / float(n_instances), runtimes)))

map函数用法:

map(function, iterable, …)
Return an iterator that applies function to every item of iterable, yielding the results. If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. With multiple iterables, the iterator stops when the shortest iterable is exhausted.

### Java Lambda 表达式的概述 Java Lambda 表达式是一种简洁的方式来表示从属于函数式接口的一个对象。这种表达式允许程序员编写更清晰、更紧凑的代码,尤其是在处理集合操作时。Lambda 表达式在函数式编程、并发编程以及简化代码方面有着广泛应用[^1]。 #### 基本语法结构 基本的语法格式如下所示: ```java (parameters) -> expression ``` 或者对于多条语句的情况, ```java (parameters) -> { statements } ``` 这里`parameters`代表参数列表,而`expression`或`statements`则是要执行的内容[^2]。 #### 实际应用案例 下面给出几个具体的例子来展示如何利用Lambda表达式替代传统的匿名内部类写法: ##### 无参情况下的简单打印功能 当不需要任何输入参数时, 可以定义一个不带参数的方法并调用它. ```java // 定义了一个名为Test的功能接口及其默认实现. interface Test { void test(); } public class ExampleNoParams { public static void main(String[] args) { // 使用lambda表达式创建Test接口的新实例. Test test = () -> System.out.println("Executing the test method"); // 调用该方法. test.test(); } } ``` 这段程序会输出 `Executing the test method`. ##### 处理字符串列表 另一个常见场景是对一组数据项进行遍历和处理. 下面的例子展示了怎样使用`forEach()` 方法配合System.out::println 来逐个打印出给定的名字列表. ```java import java.util.Arrays; import java.util.List; public class PrintNamesUsingMethodReference { public static void main(String[] args) { List<String> names = Arrays.asList("John", "Jane", "Jim"); // 使用方法引用代替完整的lambda表达式. names.forEach(System.out::println); } } ``` 此段代码将会依次显示 `"John"` , `"Jane"` 和 `"Jim"` . #### 方法引用 除了直接书写lambda体外,Lambda还支持一种叫做 **方法引用** 的特性, 即可以通过已有的静态方法或实例方法来进行快速引用而不必重复编码逻辑. 这种方式不仅提高了可读性也减少了冗余度[^4]. 例如,在上述名字列表打印的例子中使用的`System.out::println`, 就是一个典型的方法引用范例.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值