Transcrypt:如何检查空列表?

时间:2018-09-18 14:02:49

标签: python transcrypt

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

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

可以通过将while stack:替换为while len(stack):来解决,但这只是不可接受的解决方法。还有其他与Transcrypt相关的实用指示开关可以解决吗?

2 个答案:

答案 0 :(得分:2)

使用编译指示打开真实性:

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%作为通过编译指示和命令行开关提供的选项。

这个想法是,使用默认值进行编译可以为您提供快速而紧凑的代码,并且可以激活一些通过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/

但是,使用此页面的页面加载时间很长,这对于我们的需求是不可接受的,因为我们将其用于实际项目中的生产。通常,如果您打算专业地使用此功能,则在阅读文档时值得。我必须说,我很少自己阅读任何文档,但是在这种情况下,它很值得。

答案 1 :(得分:0)

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

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

很难建议一种解决方法,因为对于不合格的口译员,所有赌注都没有。

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