给定一个数组[1, 2, 3, 4],我如何找到其元素的总和?(在这种情况下,总和将是10.)
我认为$.each可能有用,但我不确定如何实现它.
我一直认为函数式编程可以用Python完成.因此,我很惊讶Python在这个问题上没有得到很多提及,当提到它时,它通常不是很积极.然而,没有给出很多理由(没有提到模式匹配和代数数据类型).所以我的问题是:为什么Python不适合函数式编程?是否有更多的原因,而不是缺乏模式匹配和代数数据类型?或者这些概念对函数式编程如此重要,以至于不支持它们的语言只能被归类为二级函数式编程语言?(请记住,我在函数式编程方面的经验非常有限.)
filter,map并且reduce在Python 2中完美地工作.这是一个例子:
>>> def f(x):
return x % 2 != 0 and x % 3 != 0
>>> filter(f, range(2, 25))
[5, 7, 11, 13, 17, 19, 23]
>>> def cube(x):
return x*x*x
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
>>> def add(x,y):
return x+y
>>> reduce(add, range(1, 11))
55
Run Code Online (Sandbox Code Playgroud)
但是在Python 3中,我收到以下输出:
>>> filter(f, range(2, 25))
<filter object at 0x0000000002C14908>
>>> map(cube, range(1, 11))
<map object at 0x0000000002C82B70> …Run Code Online (Sandbox Code Playgroud) 当想要执行一个副本(1. doable with copy_if)但是从一个容器值到一个指向这些值的指针容器(2.可行transform)时,就出现了一个用例.
可用的工具,我不能做到这一点,在不到两个步骤:
#include <vector>
#include <algorithm>
using namespace std;
struct ha {
int i;
explicit ha(int a) : i(a) {}
};
int main()
{
vector<ha> v{ ha{1}, ha{7}, ha{1} }; // initial vector
// GOAL : make a vector of pointers to elements with i < 2
vector<ha*> ph; // target vector
vector<ha*> pv; // temporary vector
// 1.
transform(v.begin(), v.end(), back_inserter(pv),
[](ha &arg) { return &arg; });
// 2.
copy_if(pv.begin(), pv.end(), …Run Code Online (Sandbox Code Playgroud) 首先,我通过纯粹的好奇心来问这个问题,看看一些伟大的单线技能.该sum()函数仍然是对列表中的对象求和的最佳函数.
但正如所说的那样,我纯粹的好奇心问道:有没有办法在一行中总结list(显然,不使用sum())对象?让我们说清单就是range(0, 100)
我完全不知道如何实现这一点,但由于Python非常灵活,所以我毫不怀疑它是可能的.
在python中,我们可以将列表总结为:sum(list_of_integers).
现在sum只是运算符中两个元素之间的操作+.
如果我想要什么总结与不同的运营商像一个列表or,and,xor等?
我可以使用for循环逐个手动完成,但必须有更好的方法.
我想要做的是按顺序减去该列表中的所有项目:
>>> ListOfNumbers = [1,2,3,4,5,6,7,8,9,10]
>>> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 # should be computed
-53
Run Code Online (Sandbox Code Playgroud)