在python中的lambda

栏目: Python · 发布时间: 7年前

内容简介:代码日志版权声明:翻译自:http://stackoverflow.com/questions/7974442/lambda-in-python

我在 python 中重新考虑一些方案练习(如果有意义的话),找出py可以在FP方面做什么.我的问题在python中涉及lambda:

我可以在python中定义一个函数作为参数之一吗?

想想:

def f (op,x,y):
    #return some lambda function that combines x and y in the appropriate way
    #i.e if op is +, then return x+y, if op is -, then return x-y etc

#Edit : added usage
#this should be called like this:
f(+, 1,2) #should return 3

我知道这是可能的方案,但有什么等同于python?我得到的印象是,在python中的lambda只是定义一个方法的一种较短的方式,我没有找到任何方法来定义python中的一般组合函数.

我可以在你的问题中看到一些点,让我们按顺序通过它们:

我可以把一个函数作为参数传递给某人吗?

是:

def f(op, x, y):
    return op(x, y)

def add(x, y):
    return x + y

f(add, 10, 7) #gives 17

2.那么呢呢呢?

与方案不同,Python操作符不是函数,因此您不能直接作为参数传递它们.您可以自己创建包装器功能,也可以从标准库导入 operator 模块.

import operator

operator.add(1, 2)
(lambda x,y : x+y)(1, 2)

在大多数情况下,运算符不是真正的功能是有点难过,但至少Python给我们链接的比较,如10<= x<100交换... 那么Python和Scheme之间有什么区别呢? 在一般意义上,Python中的函数与Scheme中的函数一样强大,但有一些注意事项: lambda关键字有限 您只能具有单个表达式作为函数体

f = lambda x, y: x + y

由于Python中有一些是语句而不是表达式(赋值,2.x打印,…)的东西,往往需要回到命名函数.

有关闭

def make_printer(msg):
    def printer():
        print msg
    return printer

printer('a message')()

但它们中变异的变量是一种痛苦

这不行.它尝试绑定内部函数的新n,而不是使用外部函数

def make_counter(n):
    def inc():
        n = n + 1
        return n
    return inc

新的3.x非本地关键字

def make_counter(n):
    def inc():
        nonlocal n
        n = n + 1
        return n
    return inc

解决方案w /可变对象

def make_counter(n):
    nw = [n]
    def inc():
       nw[0] = nw[0] + 1
       return nw[0]
    return inc

对象而不是关闭.使用魔术__call__方法假装其功能

class Counter:
    def __init__(self, n):
        self.n = n
    def __call__(self):
        self.n += 1
        return self.n

代码日志版权声明:

翻译自:http://stackoverflow.com/questions/7974442/lambda-in-python


以上所述就是小编给大家介绍的《在python中的lambda》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Introduction to Programming in Java

Introduction to Programming in Java

Robert Sedgewick、Kevin Wayne / Addison-Wesley / 2007-7-27 / USD 89.00

By emphasizing the application of computer programming not only in success stories in the software industry but also in familiar scenarios in physical and biological science, engineering, and appli......一起来看看 《Introduction to Programming in Java》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具