python基础语法+爬虫+图像处理+NumpyPandas数据处理(12天速成,第5天下-函数式编程)

本文介绍了函数式编程中的lambda表达式在Python和Java中的运用,包括作为参数、返回值以及Java中如何通过Comparator接口和Lambda简化数组排序过程。对比了Python和Java中Lambda的写法、作用以及函数式编程的区别。
摘要由CSDN通过智能技术生成
#函数式编程
    #函数本身,可以赋值给变量;
    #【常用】:可以作为(函数的)参数【系统自带的sort、filter等】【通常为lambda表达式形式】
    #【很少自己定义】:可以作为(函数的)返回值;
#@1
#赋值给变量
s1 = lambda x:print(x);

# 相当于
def s2(x):
    print(x);

s1("123");
s2("123");
123
123
#@2
#例如sort、filter都接收函数参数
#filter(函数,list列表):对list列表进行过滤,只取出满足要求的那些数据

ls = [1,2,3,4,5,6,7,8,9];
#只保留偶数
def isOu(x):
    return x%2 == 0; # 返回true/false

ls2 = filter(isOu,ls)
print(list(ls2))

ls2 = filter(lambda x:x%2==0,ls);
print(list(ls2))
[2, 4, 6, 8]
[2, 4, 6, 8]
#Java中的Lambda
    #Java中有Lambda吗?
    #Java支持函数式编程吗?
    #在java中函数(方法)可以作为参数吗,可以作为返回值吗?
#基础的较难理解的部分,比较高级,比较重要

#Java中有lambda表达式,但是这个与python中的lambda表达式的作用不同
#Java通过一种特殊的方法,来实现函数式编程
#Java中函数/方法,不可以作为参数或返回值,但是有折中的解决方案
【Java内容延伸,扩展】:
String[] sa = {"1","23","3","110","86","9","10"};
//按照数字的大小来排序;
	//不能使用默认排序方式,指定排序规则

//1//两个参数,第一个是要排序的数组;第二个是Comparator接口类型【比较器】
	//接口需要使用类来实现
Comparator<String> mycp = new MyComparator();//多态
Arrays.sort(sa,mycp);

//2//在第一层的写法中,我需要额外的在外部创建一个.java文件,有可能这个类就使用这一次
	//这就显得有点啰嗦、臃肿!
//通过“匿名内部类”,不在外部创建.java文件了
Arrays.sort(sa,new Comparator<String>() { //new 接口(){方法实现}
	@Override
	public int compare(String o1, String o2) {
		return Integer.parseInt(o1)-Integer.parseInt(o2);
	}});

//3层:
//第二层写法,看起来好麻烦啊,在jdk1.8版本中,对写法2,进一步优化,引入了Lambda表达式的形式
//java中的Lambda: (参数)->{方法体}
	//进一步简便:参数类型可以不要;方法体如果只有一句话,那么大括号和return都可以不要;
Arrays.sort(sa,
	(o1,o2)-> Integer.parseInt(o1)-Integer.parseInt(o2)
);
System.out.println(Arrays.toString(sa));
对比Python和Java中的Lambda的不同:
1、写法
python:
lambda 参数:一条函数体语句

java:
(参数)->{函数体}
函数体如果是单一语句,也可以省略大括号

2、作用
python:
lambda是对函数的一种实现方式

java:
lambda是接口的一种实现方式
Comparator<String> cmp = (o1,o2)-> Integer.parseInt(o1)-Integer.parseInt(o2) ;

3、函数式编程
python中函数可以直接作用参数

java中函数不能直接作为参数,但可以使用lambda实现的接口作为参数
Arrays.sort(sa,(o1,o2)-> Integer.parseInt(o1)-Integer.parseInt(o2));

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值