2

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

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

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

4

2 回答 2

3

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

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

您还可以使用-tor--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/

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

于 2018-09-18T17:00:44.340 回答
0

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

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

很难提出解决方法,因为如果使用不合格的口译员,所有的赌注都会失败。

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

于 2018-09-18T14:13:03.710 回答