【发布时间】:2021-06-03 20:06:00
【问题描述】:
我正在尝试输入提示海象运算符表达式,即
while (var: int := some_func()): ...
我该怎么做?
【问题讨论】:
我正在尝试输入提示海象运算符表达式,即
while (var: int := some_func()): ...
我该怎么做?
【问题讨论】:
【讨论】:
= 0 有必要吗?看来var: int 就足够了。
var: Optional[int],这样才不会违反类型。
var: int 实际上并没有创建var,所以它永远不会有None 的值。为什么会违反类型?
var: Optional[int] = None
Optional 提示;这只是一个例子。单独var: int 应该没问题,只要保证some_func 返回int。
我不相信你可以。
一个变量可以被注释,因为赋值的语法规则是
assignment:
| NAME ':' expression ['=' annotated_rhs ]
...
请注意,类型提示在名称后面的 : 和 = 之间是显式的。
另一方面,赋值表达式仅在:=之前提供名称,没有类型提示:
named_expression:
| NAME ':=' ~ expression
| expression !':='
【讨论】:
if x: int := f(y): 这样的东西不能用 LL(1) 语法来表达;判断x 后面的: 是否引入类型提示或完成条件所需的前瞻对LL(1) 解析器根本不可用。 Python 现在使用 PEG 解析器,我认为它更加灵活,但 := 早于新解析器的引入。