关键词:
【中文标题】Python 和函数式编程:有 apply() 函数吗?【英文标题】:Python and functional programming: is there an apply() function? 【发布时间】:2015-11-21 19:48:33 【问题描述】:Scala 有 apply()
函数。
我是 Python 新手,我想知道我应该如何编写以下单行代码:
(part_a, part_b) = (lambda x: re.search(r"(\w+)_(\d+)", x).groups())(input_string)
这样的话我会感觉更好:
(part_a, part_b) = input_string.apply(lambda x: re.search(r"(\w+)_(\d+)", x).groups())
从 FF 的角度来看,我错了吗? Python中有这样的构造吗?
编辑:我知道选不好的 sn-p。
【问题讨论】:
不,没有,但编写自己的代码很容易,part_a, part_b = apply(lambda ...: ..., input_string)
可以工作。
这将要求所有对象都有一个 apply 方法,而他们没有。所以我担心你不得不忍受它。请注意,如果您使用更长的方式来编写相同的内容,您会感觉更好。
Python 从一开始也有一个apply
函数,但是自从apply(fn, args, kwargs) == fn(*args, **kwargs)
之后就没有什么用处了..
可能是functools.partial()
?
如果你打算只使用一次 lambda 函数,为什么还要使用它? re.search(r"(\w+)_(\d+)", input_string).groups()
有什么问题?
【参考方案1】:
写 Haskell 的时候写 Haskell。写 Python 时只写 Python:
part_a, part_b = re.search(r"(\w+)_(\d+)", input_string).groups()
【讨论】:
【参考方案2】:如果您使用的是没有apply
的 Python,您始终可以自己编写...
def apply(fn, args=(), kwargs=None):
if kwargs is None:
kwargs =
return fn(*args, **kwargs)
仅仅因为你可以,并不意味着你应该......
【讨论】:
【参考方案3】:Python 没有这样的结构;重点是什么? lambda x: ...
是一个函数,因此它应该像普通函数一样使用,即,就像你的第一个 sn-p 中的 (lambda x: ...)(input_string)
一样。
但是,就您而言,我认为您甚至没有理由为 lambda 烦恼;做吧:
(part_a, part_b) = re.search(r"(\w+)_(\d+)", input_string).groups()
【讨论】:
【参考方案4】:如果您担心重用,您可以编译正则表达式:
rx = re.compile(r"(\w+)_(\d+)")
a, b = rx.search(input_string).groups()
【讨论】:
我倾向于将其用于文档而不是性能(假设我可以给rx
一个信息性名称)。【参考方案5】:
Python 曾经有一个 apply 函数 (docs),但它已在 python 3 中被删除,因为它是不必要的,并且违反了 python 的原则,即应该只有一种方法来做特定的事情。
比如说,我们有一个名为“func”的函数,我们可以很容易地调用 func(*args) 而不是 apply(func, args)。
【讨论】:
05-2函数基础(代码片段)
函数在未未深入学习之前,我们写的代码都是函数式编程。之后,我们会一直使用面向对象编程。1函数式编程和面向对象编程的区别函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可面向对象:对函... 查看详情
swift函数式编程十三(函子适用函子单子)(代码片段)
解释一些函数式编程中的专用术语和一些常⻅模式,比如函子(Functor)、适用函子(ApplicativeFunctor)和单子(Monad)等。理解这些常⻅的模式,会有助于设计自己的数据类型,并为API选择更合适的函数。函子目前已经遇到了几... 查看详情
r语言问题剖析20篇-r语言泛函式编程purrr实现优雅循环迭代(代码片段)
...其他编程语言中,for循环是非常重要的。然而,R是一种函数式编程语言,这意味着R有能力"将for循环包裹在一个函数中,并调用该函数而不是直接使用for循环"。熟悉R语言的人都很熟悉基础R中的apply系列函数(即apply(), vapply()... 查看详情
r语言问题剖析20篇-r语言泛函式编程purrr实现优雅循环迭代(代码片段)
...其他编程语言中,for循环是非常重要的。然而,R是一种函数式编程语言,这意味着R有能力"将for循环包裹在一个函数中,并调用该函数而不是直接使用for循环"。熟悉R语言的人都很熟悉基础R中的apply系列函数(即apply(), vapply()... 查看详情
对函数式编程语言的理解
1.什么是函数式语言?函数式语言(functionallanguage)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言。函数式语言主要成分是原始函数、定义函数和函数型。这种语言具有较强的组织数据结构的能力,可以把某一数据... 查看详情
javascript中的函数式编程
本文和大家分享的主要是javascript中函数式编程相关内容,一起来看看吧,希望对大家学习javascript有所帮助。 函数式编程(functionalprogramming)或称函数程序设计,又称泛函编程,是一种编程范型,比起命令式编程,函数式编程... 查看详情
函数式编程和高阶函数
...数本身作为参数传入另一个函数,还允许返回一个函数!Python对函数 查看详情
函数的设计和使用
...的隐士耦合。 合理使用函数,规范编码 充分利用python函数式编程的特点,让自己定义的函数尽量符合纯函数式编程的要求。函数的定义语法: def函数名(【参数列表 查看详情
函数式编程
函数式编程(英语:functionalprogramming)或称函数程序设计、泛函编程,是一种编程范式,它将计算机运算视为函数运算,并且避免使用程序状态以及易变对象。其中,λ演算(lambdacalculus)为该语言最重要的基础。而且,&lamb... 查看详情
过程式编程和函数式编程有啥区别? [关闭]
】过程式编程和函数式编程有啥区别?[关闭]【英文标题】:Whatisthedifferencebetweenproceduralprogrammingandfunctionalprogramming?[closed]过程式编程和函数式编程有什么区别?[关闭]【发布时间】:2010-09-0614:25:21【问题描述】:我已经阅读了pro... 查看详情
什么是函数式编程(代码片段)
导读建议先阅读一下这几篇博客:函数式编程初探函数式编程入门教程图解Monad什么是函数式编程函数式编程中的函数指的并不是编程语言中的函数(或方法),它指的是数学意义上的函数,即映射关系(如:y=f(x)),就是y和x... 查看详情
函数式、动态和面向方面编程的模式
...数式编程模式(最佳实践)的书籍(文章、资源)?对于Python和Rub 查看详情
js函数式编程译5.2函子(functors)
函子(Functors)态射是类型之间的映射;函子是范畴之间的映射。可以认为函子是这样一个函数,它从一个容器中取出值,并将其加工,然后放到一个新的容器中。这个函数的第一个输入的参数是类型的态射,第二个输入的参数... 查看详情
函数式编程之组合性:函数式编程为什么如此吸引人?
GC、Lambda、Java8的流(Stream)概念其实都来自函数式编程。他因何有如此魔力呢?组合行为的高阶函数在函数式编程:接收函数,作为输入或返回一个函数,作为输出这种函数叫高阶函数(High-orderfunction... 查看详情
函数式编程:容器类型值类型
...和解封;2、值类型的管理:存储、遍历、查询;为高阶函数;3、惰性求值的管理:处理函数的保存、处理函数的执行(apply)。 值类型:代表数据:用于进行处理,对应transform。 值类型的产生:1、输入;2、内部计算。 查看详情
函数式编程语言和命令式编程语言有啥区别?
】函数式编程语言和命令式编程语言有啥区别?【英文标题】:Whatisdifferencebetweenfunctionalandimperativeprogramminglanguages?函数式编程语言和命令式编程语言有什么区别?【发布时间】:2013-07-2311:29:06【问题描述】:大多数主流语言,... 查看详情
js函数式编程基础:高阶函数柯理化函数合成loadash
一、函数式编程什么是函数式编程(FP)?FP是一种编程范式,也是一种编程风格,和面向对象是并列的关系。FP用于描述数据或函数之间的映射;根据输入通过某种运算获得相应的输出,即映射关系,例如:y=sin(x)。FP需要有输入和... 查看详情
函数和函数式编程
python的过程就是函数,因为解释器会隐式地返回默认值None。实际编程中大部分偏函数更接近过程,不显示地返回任何东西。当没有显示地返回元素或者如果返回None时,python会返回一个None。* 元组 ** 字典def子句的... 查看详情