我有两个具有以下签名的生成器:
gen1(inputs) -> Iterator[A]gen2(Iterator[A]) -> Iterator[B]我的目标是编写另一个生成器(我们称之为final_gen),它同时提供A和B。
但是,如果我将gen1和链接gen2在一起,就像
def final_gen(inputs):
yield from gen2(gen1(inputs))
Run Code Online (Sandbox Code Playgroud)
gen1会被消耗而我无法回来A。
只是想知道“重用”的Pythonic方式是什么gen1?
更新 我可以想到一些方法,但我不满意任何一个
gen1到元组或列表中,以便我可以使用这些值。这是内存效率低下的。itertools.tee创建 的克隆gen1。然而,这是计算效率低下的。我对环境变量有一次非常奇怪的经历。
总之,我需要设置一个环境变量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是错误的。是这样吗?
因为我不知道出了什么问题,所以我无法提供可重现的代码示例。我真的很感激任何解释。
当我使用运行测试套件时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)
为什么当测试明显失败时我却收到通过消息?