如果重复,请告诉我,但我找不到答案。此外,这个问题似乎并没有解决这个问题。
我想在同一行中声明多个变量的类型。代替
a: float
b: float
c: float
我想用之类的东西
a, b, c: float
但是我有一个语法错误。正确的语法是什么?
似乎不可能用一条注释语句注释多个变量。
注释赋值语句将注释定义为:
annotated_assignment_stmt ::= augtarget ":" expression
["=" (starred_expression | yield_expression)]
因此,augtarget
规则规定了允许在冒号前面加什么。augtarget
定义为:
augtarget ::= identifier | attributeref | subscription | slicing
因此,唯一可以放在冒号之前的是标识符(即单个变量(、attributeref(后面跟着.some_attribute_name
的表达式(、订阅(后面跟着[some_index]
的表达式(或切片(与订阅的语法相同(。a, b, c
不是这些东西中的任何一个,所以a, b, c: <some type>
不是合法语法。
如果您只想在一行中注释所有三个变量,而不一定要在一条语句中注释,则可以用分号将独立的简单语句链接在一起:
a:float; b:float; c:float
但这有点不令人满意,因为您仍然需要键入float
三次。
如果PEP484类型提示支持同一类型的多个声明作为一条语句,并且在展开元组时支持类型提示,那就太好了。
除此之外,当我想在一条语句中声明同一类型的多个变量时,我发现伪赋值作为一种变通方法很有用:
# Multiple type-declarations on same line, but not same statement:
a: List[int]; b: Tuple[float, ...]; c: Iterable[str]
# Multiple declarations of same type in same statement:
# noinspection PyUnusedLocal
k = l = m = n = 0 # type: int
# noinspection PyUnusedLocal
q = r = s = t = '' # type: str
# noinspection PyUnusedLocal
x = y = z = w = 0.0 # type: float
说明:即使从未使用过初始的伪值(因为变量会被覆盖(,它们仍然可以确保这些变量被理解为具有最初给定的值的类型。(我还添加了老式的评论类型提示,以向人类读者明确其意图。但删除它们并没有什么区别。PyCharm仍然理解。(
我正在使用PyCharm 2021.2.1和Python 3.8。(PyCharm有自己的linter实现PEP484,与mypy分离。((此外,我今年夏天刚刚开始学习Python,所以这个答案可能会有所改进。(
a,b,c: float,float,float
将是正确的
您必须为所有变量分配所有值。
E.G:-
a,b,c = 1.0,2.0,3.0
a,b,c = 1.0,1.0,1.0