Transcrypt:如何检查空列表?

Transcrypt: How to check for empty list?

这是一个简单的 python 程序,在使用 Transcrypt 3.7.5 编译时会导致无限循环:

stack = [ch for ch in "Hello"]
while stack:
    print(stack.pop())

这可以通过将 while stack: 替换为 while len(stack): 来解决,但这只是一个不可接受的解决方法。是否有任何其他与 Transcrypt 相关的 pragma 开关可以绕过它?

如果它无限循环提供的代码,那只是一个不合格的 Python 解释器。 CPython解释器不会无限循环(test.py包含问题中的代码):

PS C:\Users\Matt> python test.py
o
l
l
e
H
PS C:\Users\Matt>

很难提出解决方法,因为如果使用不合格的解释器,一切都会失败。

免责声明:我对 Transcrypt 了解不多,但您可能应该打开错误报告

使用 pragma 开启真实性:

http://www.transcrypt.org/docs/html/special_facilities.html#automatic-conversion-to-truth-value-pragma-tconv-and-pragma-notconv

# __pragma__ ('tconv')

stack = [ch for ch in "Hello"]
while stack:
    print(stack.pop())

这将打印:

o
l
l
e
H

您还可以使用 -t--tconv 命令行开关,如以下文档所述:

http://www.transcrypt.org/docs/html/installation_use.html#available-command-line-switches

Transcrypt 的目标是默认支持 90% 的 CPython,另外 9% 作为选项通过 pragma 和命令行开关支持。

这个想法是,使用默认值进行编译可以为您提供快速而紧凑的代码,并且可以将一些通过 JavaScript 支持的昂贵机制作为选项激活。这例如适用于运算符重载。

另请参阅:

http://www.transcrypt.org/docs/html/what_why.html#what-is-transcrypt

http://www.transcrypt.org/docs/html/differences_cpython.html

有完全一致的浏览器 Python,例如PyPyJS:

https://pypyjs.org/

然而,使用它的页面需要很长时间才能加载,这对我们的需求来说是不可接受的,因为我们在现实生活项目中使用它进行生产。一般来说,如果你打算专业地使用它,那么阅读文档是值得的。我必须说我自己很少阅读任何文档,但在这种情况下它是值得的。