我在这里看到很多关于函数式语言和东西的讨论.你为什么要使用"传统"语言?他们做得更好?他们更糟糕的是什么?什么是理想的函数式编程应用程序?
仅仅因为函数是第一类对象,有闭包和高阶函数,Javascript是否应该被称为函数式编程语言?我认为它缺少的主要功能是纯函数,并且它不像其他函数式语言那样"感觉",比如lisp(虽然这不是一个很好的理由,它不是一个功能性的语言......)
网上似乎有很多关于python 3.0中reduce()函数更改以及如何删除它的讨论.我有点难以理解为什么会这样; 我发现在各种情况下使用它是相当合理的.如果蔑视只是主观的,我无法想象会有这么多人关心它.
我错过了什么?reduce()有什么问题?
在工作中,我们习惯以非常标准的OO方式编写Python.最近,有几个人加入了这个功能性的潮流.他们的代码现在包含更多的lambda,map和reduce.我知道函数式语言对并发性有好处,但Python函数编程真的有助于并发吗?我只是想了解如果我开始使用更多Python的功能,我会得到什么.
有哪些语言可以促进面向对象和函数式编程?我知道任何支持一流功能的语言都可以被认为是功能性的,但我正在寻找一种专门针对两种编码风格的语法.
使用这样的语言,我想象将所有状态更改隔离到单个代码部分,并使程序的其余部分纯粹功能.只是想到它让我流口水(调试天堂!).
到目前为止,我已经发现了Scala,虽然我刚刚听说过它(它看起来很神奇).在这种"混合风格"范式中是否有任何重要的竞争者?
有没有办法在列表中实现非懒惰的从左到右调用操作python?
例如 scala
val a = ((1 to 50)
.map(_ * 4)
.filter( _ <= 170)
.filter(_.toString.length == 2)
.filter (_ % 20 == 0)
.zipWithIndex
.map{ case(x,n) => s"Result[$n]=$x"}
.mkString(" .. "))
a: String = Result[0]=20 .. Result[1]=40 .. Result[2]=60 .. Result[3]=80
Run Code Online (Sandbox Code Playgroud)
虽然我意识到许多人不喜欢上面的语法,但我喜欢从左到右移动并随时添加任意操作的能力.
for当有三个或更多操作时,python 理解是不容易阅读的.结果似乎是我们需要将所有内容分解成块.
[f(a) for a in g(b) for b in h(c) for ..]
Run Code Online (Sandbox Code Playgroud)
有没有机会提到这种方法?
注意:我尝试了一些库,包括toolz.functoolz.python3懒惰的评估很复杂:每个级别返回一个map对象.此外,它不能显示它可以在输入上操作list.
我对 Python 没有太多经验。我正在尝试以函数式风格进行编码,就像我习惯的 Java 和 JavaScript 一样,例如
var result = getHeroes('Jedi')
.map(hero => { hero: hero, movies: getMovies(hero) })
.filter(x => x.movies.contains('A New Hope'));
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 Python 中做类似的事情,但我无法获得相同的链接样式。我不得不将其分解为两个我不喜欢的陈述:
tmp = ((hero, get_movies(hero)) for hero in get_heroes('jedi'))
result = ((hero, movies) for (hero, movies) in tmp if movies.contains('A New Hope')
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
谢谢。
Python 变量是鸭子类型的,可变的,它的函数可以编写为具有副作用。(换句话说,它有很多非函数式编程特性。)
但是,它也具有一流的功能,但它不是函数式编程语言。所以我想,即使它不属于该范式,编程语言也可以具有功能方面(或另一种语言范式的方面),这一定是真的。究竟是什么让 Python不是函数式编程语言?是测试它是否具有单一特征或多个事物的测试?(如果是前者,使 Python 无法运行的单个方面或使 Haskell 具有功能的单个方面是什么?)
python programming-languages functional-programming first-class-functions
根据tutorialspoint.com,Python 是一种函数式编程语言。“一些流行的函数式编程语言包括:Lisp、Python、Erlang、Haskell、Clojure 等。”
https://www.tutorialspoint.com/functional_programming/functional_programming_introduction.htm
但是其他消息来源说 Python 是一种面向对象的编程语言(您可以在 Python 中创建对象)。
那么Python两者都是吗?如果是这样,如果您正在尝试编写需要大量数学计算的东西,Python 是否仍然是一个不错的选择(因为函数式语言具有并发性、更好的数学语法和更高级别的函数)?
有我的问题:
假设我们有3个函数:f,g,h和以下代码
y = f(x)
a = g(y)
b = h(y)
Run Code Online (Sandbox Code Playgroud)
我想在一行上完成这项工作,例如:
a,b = g(f(x)),h(f(x))
Run Code Online (Sandbox Code Playgroud)
但如果f非常慢(并且没有缓存它的结果),这效率不高
我有一个带发电机的解决方案:
a,b = ((g(y),h(y)) for y in (f(x),)).next()
Run Code Online (Sandbox Code Playgroud)
但这不是很可读
我想做一些这样的事情:
with f(x) as y: a,b = g(y),h(y)
Run Code Online (Sandbox Code Playgroud)
有没有人有想法?
(这是骗子
y = f(x);a = g(y);b = h(y)
Run Code Online (Sandbox Code Playgroud)
)
码
import time
def f(t):
time.sleep(1)
print 'f called'
return t
def g(t): return 1
def h(t): return 2
a,b = g(f(x)),h(f(x))
a,b = ((g(y),h(y)) for y in (f(x),)).next()
Run Code Online (Sandbox Code Playgroud)