函数式编程

python函数式编程

强颜欢笑 提交于 2019-12-04 10:29:53
1.高阶函数 将函数作为参数传入 1)map/reduce map:传入两个参数,一个是函数,一个是迭代器,主要作用是将运算规则抽象化表达,如: >>> def f(x): return x * x >>> r = map(f,[1,2,3,4,5,6,7]) >>> list(r) [1, 4, 9, 16, 25, 36, 49] reduce:传入两个参数,做累计效果 将[1,3,5,6]变成1356 >>> from functools import reduce >>> def fn(x,y): return x*10 + y >>> reduce(fn,[1,3,5,6]) 1356 也可将str转换成int from functools import reduce DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} def str2int(s): def fn(x, y): return x * 10 + y def char2num(s): return DIGITS[s] return reduce(fn, map(char2num, s)) 2)fliter:用于过滤序列 def is_odd(n): return n % 2 == 1

Java 8 函数式接口

非 Y 不嫁゛ 提交于 2019-12-04 08:55:38
本文节译自 GeeksForGeeks Java 8 函数式接口 “函数式接口(Functional Interface)”这个名称来源于"函数式编程(Functional Programming)", 我们最常用的面向对象编程(Java)属于 命令式编程 (Imperative Programming)这种编程范式。常见的编程范式还有 逻辑式编程 (Logic Programming), 函数式编程 (Functional Programming)。 函数式编程作为一种编程范式,在科学领域,是一种编写计算机程序数据结构和元素的方式,它把计算过程当做是数学函数的求值,而避免更改状态和可变数据。 函数式编程并非近几年的新技术或新思维,距离它诞生已有大概50多年的时间了。它一直不是主流的编程思维,但在众多的所谓顶级编程高手的科学工作者间,函数式编程是十分盛行的。 什么是函数式编程?简单的回答:一切都是数学函数。函数式编程语言里也可以有对象,但通常这些对象都是恒定不变的 —— 要么是函数参数,要什么是函数返回值。函数式编程语言里没有 for/next 循环,因为这些逻辑意味着有状态的改变。相替代的是,这种循环逻辑在函数式编程语言里是通过递归、把函数当成参数传递的方式实现的。 举个例子: a = a + 1 这段代码在普通成员看来并没有什么问题,但在数学家看来确实不成立的

函数式编程

泄露秘密 提交于 2019-12-04 07:52:59
函数式编程是指用一系列函数解决问题 好处:用每个函数完成每个细小的功能,一系列函数任意组合能够解决大问题 函数仅仅接收输入并产生输出,不包含任何能影响输出的内部状态 函数之间的可重入性 当一个函数的输入实参一定,结果也必须一定的函数为可重入函数 来源: https://www.cnblogs.com/pyliuwei/p/11846668.html

jdk8 函数式编程概念

一曲冷凌霜 提交于 2019-12-03 23:01:07
yls 2019/11/7 函数式接口 如果一个接口只有一个 抽象 方法,那么该接口就是函数式接口 如果我们在某接口上声明了FunctionalInterface注解,那么编译器就会按照函数式接口的定义来要求改接口 如果一个接口只有一个抽象方法,但并没有给该接口声明FunctionalInterface注解,那么编译器依然会将该接口看作是函数式接口, 也就是说,FunctionalInterface注解只有检验该接口是否为函数式接口的作用,并没有决定性作用 lambda表达式 依赖于函数式接口 在java中,lambda表达式是对象 与面向对象的不同 面向对象提前定义好行为,lambda在使用时再定义行为 ``` public class Test3 { public static void main(String[] args) { //lambda表达式是对象,在使用时定义行为,增加使用者的灵活性 Function<Integer, Integer> f = v -> v * v; System.out.println(Test3.compute(3, f)); System.out.println(Test3.method1(4)); } public static int compute(int a, Function<Integer, Integer> function)

[译] 函数式 JavaScript 快速入门

走远了吗. 提交于 2019-12-03 07:40:31
本文转载于: 猿2048 网站➧ https://www.mk2048.com/blog/blog.php?id=h220i1ihaa 原文地址: A Quick Introduction to Functional Javascript 原文作者: Angelos Chalaris 译文出自: 掘金翻译计划 本文永久链接: https://github.com/xitu/gold-miner/blob/master/TODO1/a-quick-introduction-to-functional-javascript.md 译者: Zheng7426 校对者: AmyFoxFN 函数式 JavaScript 快速入门 函数式编程 是目前最热门的趋势之一,有很多好的论点解释了人们为什么想在代码中使用它。我并不打算在这里详细介绍所有函数式编程的概念和想法,而是会尽力给你演示在日常情况下和 JavaScript 打交道的时候如何用上这种编程。 函数式编程是一种编程范例,它将计算机运算视为数学上的函数计算,并且避免了状态的改变和易变的数据。 重新定义函数 在深入接触 JavaScript 的函数式编程范例之前,咱们得先知道什么是 高阶函数 、它的用途以及这个定义本身究竟有什么含义。高阶函数既可以把函数当成参数来接收,也可以作为把函数作为结果输出。你需要记住 函数其实也是一种值

函数式编程实战(一)

余生颓废 提交于 2019-12-03 04:51:55
假设有如下测试数据(抓取了阮一峰老师的部分数据,希望阮老师不要介意): [ { "title": "周刊", "href": "http://www.ruanyifeng.com/blog/weekly/", "categories": [ { "title": "科技爱好者周刊:第 80 期", "href": "http://www.ruanyifeng.com/blog/2019/11/weekly-issue-80.html", "publishTime": "2019-11-01", "commentCounts": 18 }, { "title": "科技爱好者周刊:第 79 期", "href": "http://www.ruanyifeng.com/blog/2019/10/weekly-issue-79.html", "publishTime": "2019-10-25", "commentCounts": 44 } ] }, { "title": "创业", "href": "http://www.ruanyifeng.com/blog/startup/", "categories": [ { "title": "谷歌的绩效管理", "href": "http://www.ruanyifeng.com/blog/2016/03/performance

什么是函数式编程

匿名 (未验证) 提交于 2019-12-03 00:37:01
函数式编程在耳边回响了多年,今天就来详细了解一下它吧。 函数式编程的主要特征是:函数是一等公民。它建议大家写纯函数、没有副作用的函数。 讨论完纯函数的内容,我们会看一下最重要的应用:函数的柯里化。 纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。其中的副作用指的是:跟函数外部环境发生的交互。包括但不限于: 更改文件系统 往数据库插入记录 发送一个 http 请求 可变数据 打印/log 获取用户输入 DOM 查询 访问系统状态 例如: slice 是纯函数而 splice 不是。 var memoize = function (f) { var cache = {}; return function () { var arg_str = JSON .stringify( arguments ); cache[arg_str] = cache[arg_str] || f.apply(f, arguments ); return cache[arg_str]; }; }; var squareNumber = memoize( function (x) { return x*x; }); squareNumber( 4 ); //=> 16 squareNumber( 4 ); // 从缓存中读取输入值为 4 的结果 //=> 16

Hadoop系列之三:函数式编程语言和MapReduce

匿名 (未验证) 提交于 2019-12-03 00:06:01
1、MapReduce和大数据问题 海量数据并行处理的核心思想无非是将一个较大的问题进行“分割包围、逐个歼灭”。然而其难点和关键点在于如何将一个大的问题分分割成多个可以分别在不同的CPU上或不同的主机上进行处理的独立小问题,而且这些独立进行处理的小问题所产生的中间结果又该如何合并成最终结果并予以输出。因此,看似简单的化整为零的处理思想却不得不面临如下的难题: (1) 如何将大问题分割为小任务?进一步地,如何将大问题分解为可以并行处理的小任务? (2) 如何将分解好的小任务派送给分布式系统中的某主机且是较为适合解决此问题的主机上的worker(进程)完成处理? (3) 如何保证某worker获取所需的数据? (4) 如何协调不同worker之间进行同步? (5) 如何将某worker的部分结果共享给其它需要此结果的worker? (6) 如何在出现软件或硬件故障时仍然能保证上述工作的顺利进行? 在传统的并行或分布式编程模型中,程序员不得不显式地解决上述的部分甚至是全部问题,而在共享内存编程中,程序员需要显式地协调对共享数据结构的如互斥锁的访问、显式地通过栅(barrier)等设备解决进程同步问题,并且要时刻警惕着程序中可能出现的死锁或竞争条件。虽然有些编程语言也或多或少地规避了让程序员面对上述问题,但却也避免不了将资源分配给各worker的问题

Scala函数式编程

匿名 (未验证) 提交于 2019-12-02 23:41:02
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chen18677338530/article/details/91450271 方法、函数、函数式编程、面向对象编程 函数式编程说明 基本语法 函数申明关键字是 def [参数:参数类型] 表示函数的输入,可以没有,如果有多个,可以用逗号分割 函数中的语句是为了实现某一功能的代码块 函数可以有返回值,也可以没有 如果没有 reture ,默认以执行到最后一行的结果作为返回值 object FunDemo1 { def main(args: Array[String]): Unit = { var n1 = 1 var n2 = 2 println("sum="+getSum(n1,n2,"+")) } def getSum(n1: Int, n2: Int,opt: String) = { if (opt == "+"){ n1 + n2 } else if (opt == "-"){ n1 - n2 } else { null } } } 斐波那契数列实现 object FunDemo2 { def main(args: Array[String]): Unit = { println(fbn(7)) } def fbn(i: Int) : Int = { if ( i == 1)

RxJS入门之函数响应式编程

匿名 (未验证) 提交于 2019-12-02 23:30:02
1.声明式(Declarativ) //命令式编程: function double(arr) { const results = [] for (let i = 0; i < arr.length; i++){ results.push(arr[i] * 2) } return results } function addOne(arr){ const results = [] for (let i = 0; i < arr.length; i++){ results.push(arr[i] +1) } return results } //声明式: const double = arr => arr.map(item => item * 2); const addOne = arr => arr.map(item => item + 1); 2.纯函数(Pure Function) 相反的不纯函数: 改变全局变量的值。 操作浏览器的DOM。 3.数据不可变性(Immutability) 问题:javascript算不算函数式编程语言? 例如,在命令式编程环境中, a:=b+c表示将表达式的结果赋给 a,而之后改变 b 或 c的值不会影响 a。但在响应式编程中,a的值会随着 b或 c的更新而更新。 RxJS 属于“函数响应式编程”。 数据流抽象了很多现实问题。 擅长处理异步操作。