構文

Generated Sat 05 Feb 2022 04:06:58 UTC

演算子

MicroPython では内包表記の変数に := を使って代入できるが、CPython では SyntaxError になる。

原因: MicroPython はコードサイズに最適化されており、このケースをチェックしていない。

回避策: CPython 互換のコードを書く場合は、この動作に頼らない用にしてする。

サンプルコード:

print([i := -1 for i in range(4)])
CPy 出力: uPy 出力:
  File "<stdin>", line 7
SyntaxError: assignment expression cannot rebind comprehension iteration variable 'i'
[-1, -1, -1, -1]

スペース

uPy はリテラル数値とキーワードの間にスペースを必要とするが、CPy はそうではない

サンプルコード:

try:
    print(eval("1and 0"))
except SyntaxError:
    print("Should have worked")
try:
    print(eval("1or 0"))
except SyntaxError:
    print("Should have worked")
try:
    print(eval("1if 1else 0"))
except SyntaxError:
    print("Should have worked")
CPy 出力: uPy 出力:
0
1
1
Should have worked
Should have worked
Should have worked

Unicode

Unicode 名エスケープは未実装

サンプルコード:

print("\N{LATIN SMALL LETTER A}")
CPy 出力: uPy 出力:
a
NotImplementedError: unicode name escapes