当前位置: 首页 > 面试题库 >

是否有与Haskell'let'等效的Python

巴博耘
2023-03-14
问题内容

是否存在与Haskell’let’表达式等效的Python,该表达式使我可以编写以下内容:

list2 = [let (name,size)=lookup(productId) in (barcode(productId),metric(size)) 
            for productId in list]

如果没有,那么 最易读的 替代方法是什么?

添加以澄清let语法:

x = let (name,size)=lookup(productId) in (barcode(productId),metric(size))

相当于

(name,size) = lookup(productId)
x = (barcode(productId),metric(size))

不过,第二个版本在列表理解方面效果不佳。


问题答案:

您可以使用临时列表理解

[(barcode(productId), metric(size)) for name, size in [lookup(productId)]][0]

或等效地,生成器表达式

next((barcode(productId), metric(size)) for name, size in [lookup(productId)])

但是这两个都太可怕了。

另一种(可怕的)方法是通过临时lambda,您立即调用

(lambda (name, size): (barcode(productId), metric(size)))(lookup(productId))

我认为建议的“ Pythonic”方式只是定义一个函数,例如

def barcode_metric(productId):
   name, size = lookup(productId)
   return barcode(productId), metric(size)
list2 = [barcode_metric(productId) for productId in list]


 类似资料:
  • 问题内容: 当搜索复杂的JSON数组和哈希中的项目时,例如: 我可以使用某种查询语言来查找商品吗? 问题答案: 是的,它称为JSONPath。源码现在在GitHub上。 它还集成到DOJO中。

  • 问题内容: 我为一位同伴编写了一个网络刮板,以节省他的工作时间。它是使用,使用和打开Firefox浏览器编写的。 我已经在使用的Linux机器上亲自编写了此代码,因此Firefox实际上不会打开并干扰我的工作。 如何使其在Windows PC的虚拟显示器中运行? 问题答案: 您无法在Windows上运行的原因是PyVirtualDisplay使用Xvfb作为其显示,而Xvfb是X Window S

  • 问题内容: 好的,我想知道的是Java有什么方法可以执行以下Python可以做到的… 因为在我看来Java可以使您获得相同的结果(我特别需要每次使用2个数字,而缺少-1来表示最后一个字符) 我还没有用Java来研究数组/列表,所以真正希望Java比这更容易 编辑:将string_sample [3]的“ i”修改为“ l”。很好看的Maroun! 问题答案: 抱歉,Java的灵活性不如Python

  • 问题内容: 有人知道类似于JavaRobot的Python类吗? 具体来说,我想在Ubuntu中执行屏幕抓取,并最终跟踪鼠标单击和键盘按下(尽管这是一个稍微不同的问题)。 问题答案: 如果您有GTK,则可以使用gtk.gdk.Display类来完成大部分工作。它控制键盘/鼠标指针获取一组对象。

  • 问题内容: 我需要使用字符串参数并在Python中创建以该字符串命名的类的对象。在Java中,我会使用。在Python中是否有等同功能? 感谢你的答复。回答那些想知道我在做什么的人:我想使用命令行参数作为类名,并实例化它。我实际上是在Jython中编程并实例化Java类,因此是问题的Java实质。 效果很好。非常感谢。 问题答案: python中的反射比Java中的反射更容易,更灵活。 没有直接函

  • 我是一个JaxB noob,但我学到了很多关于如何配置Jackson的知识。我正在为一些域对象类添加XML序列化/反序列化支持。我有一个类类型,它根据必须指定的上下文进行不同的序列化/反序列化。 通过编写HandlerInstantiator的自定义实现,我在Jackson中实现了这一点。自定义实现将上下文作为构造函数参数。当这些上下文敏感对象需要序列化器或反序列化器时,提供它的方法会使用构造处理

  • 问题内容: 有人知道类似于JavaRobot的Python类吗? 具体来说,我想在Ubuntu中执行屏幕抓取,并最终跟踪鼠标单击和键盘按键(尽管这是一个稍微不同的问题)。 问题答案: 如果您有GTK,则可以使用gtk.gdk.Display类来完成大部分工作。它控制键盘/鼠标指针获取一组对象。

  • 问题内容: Java具有格式字符串的概念,与其他语言的格式字符串非常相似。它用于诸如输出转换之类的JDK方法中。 我想知道在Java中是否有类似于C的输入转换方法? 问题答案: 看一下该站点,它解释了两种使用java中的控制台读取的方法,使用或使用System.in中的经典方法。 以下代码摘自引用的网站: - 问候。