这涉及到了标注, 字面值,运算符, 还有解包等这些内容。这是参考自官方文档的, 并且进行了整理和验证的工作。标注允许在表达式这个地方使用类型标注这种说法, 而后面那个东西则是不允许的, 它是禁止的。def f():print(test): intdef f():[x,y]: intdef f():x,y: int# 在 Cython 执行这三个函数会引发 SyntaxError# 在 MicroPython 则不检查形式字面值在数字字面值里面, 我们是可以接受下划线这种内容的, 但是另外一方呢, 是不支持的。for i in (1_1,1__1,1_):try:print(eval(i))except SyntaxError:print(Should not work)# CPython 输出# 11# Should not work# Should not work# MicroPython 输出# 11# 11# 1要求在字面数字和关键字或者点号之间留空格, 而是不需要的了。不过需要补充一点说明就是自三点一一版本开始。当字面数字后面紧跟着关键字的时候会引发相应的反应。for i in (1and 0,1or 0,1if 1else 0,0x1.to_bytes(1)):try:print(eval(i))except SyntaxError:print(Should have worked)# MicroPython 输出4个Should have worked# CPython 输出时前三项有警告... SyntaxWarning: invalid decimal literal0... SyntaxWarning: invalid decimal literal1... SyntaxWarning: invalid decimal literal... SyntaxWarning: invalid decimal literal1b\x01运算符大家是允许的, 在那些嵌套起来的推导式里面的时候, 是可以使用那个 : 符号的, 目的就是为了给迭代过程中用到的变量去进行一个赋值的操作, 但是另一方面来说, 系统对于这种行为是不支持的。print([[(j : i) for i in range(2)] for j in range(2)])# CPython 报错# SyntaxError: assignment expression cannot rebind comprehension iteration variable j# MicroPython 输出# [[0, 1], [0, 1]]# 注Python 自 3.8 加入 : 语法故如下示例与 MicroPython 一致print(a:1); print(a)没有实现名称转义print(\N{LATIN SMALL LETTER A})# CPython 输出a# MicroPython 报错NotImplementedError: unicode name escapes解包因为 是使用来标记那些需要进行解包的参数的, 如果那些等待被解包的参数是第 n 个或者更大的话, 那么参数的解包操作就起不到任何作用了, 而这里的 n 指的是 里面的位数。def example(*args):print(len(args))MORE [a, b, c]example(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,*MORE,)# CPython 输出67# MicroPython 报错SyntaxError: too many args
