小编Hon*_*ang的帖子

重用生成器的最Pythonic方式?

我有两个具有以下签名的生成器:

  • gen1(inputs) -> Iterator[A]
  • gen2(Iterator[A]) -> Iterator[B]

我的目标是编写另一个生成器(我们称之为final_gen),它同时提供AB

但是,如果我将gen1和链接gen2在一起,就像

def final_gen(inputs):
    yield from gen2(gen1(inputs))
Run Code Online (Sandbox Code Playgroud)

gen1会被消耗而我无法回来A

只是想知道“重用”的Pythonic方式是什么gen1

更新 我可以想到一些方法,但我不满意任何一个

  1. 收集gen1到元组或列表中,以便我可以使用这些值。这是内存效率低下的。
  2. 用于itertools.tee创建 的克隆gen1。然而,这是计算效率低下的。

python generator

5
推荐指数
1
解决办法
134
查看次数

检查是否设置了环境变量及其值

我对环境变量有一次非常奇怪的经历。

总之,我需要设置一个环境变量VAR1,我 99% 确定我运行了该命令export VAR1=some-value。然而,几个小时后我忘记了是否设置了,所以我跑去echo $VAR1查看。输出完全正确some-value,这证实了我的设置是正确的。

但是,当我在 python 中执行此操作时:

import os
print("VAR1" in os.environ)
Run Code Online (Sandbox Code Playgroud)

输出是False.

此时我很困惑。如果我相信我的 python 输出,则意味着我使用检查环境变量的方式echo是错误的。是这样吗?

因为我不知道出了什么问题,所以我无法提供可重现的代码示例。我真的很感激任何解释。

python environment-variables echo

1
推荐指数
1
解决办法
3744
查看次数

Cabal 说测试通过了,但实际上却失败了?

当我使用运行测试套件时cabal test,我收到以下消息:

Running 1 test suites...
Test suite tests: RUNNING...
Test suite tests: PASS
Test suite logged to: my-lib-tests.log
Run Code Online (Sandbox Code Playgroud)

但当我查看日志文件时,内容是:

Test suite tests: RUNNING...
*** Failed! Falsified (after 1 test):
[]
Test suite tests: PASS
Test suite logged to: my-lib-tests.log
Run Code Online (Sandbox Code Playgroud)

为什么当测试明显失败时我却收到通过消息?

haskell cabal

0
推荐指数
1
解决办法
128
查看次数

标签 统计

python ×2

cabal ×1

echo ×1

environment-variables ×1

generator ×1

haskell ×1