考虑以下代码,其中在声明变量x之前引用它。当它被声明时,它是从y间接声明的。
for i in range(10):
if i < 3:
state = 'earlier'
elif i < 7:
state = 'middle'
else:
state = 'later'
# do actions based on state
if state == 'later':
print(x)
elif state == 'middle':
x = y
print(y)
elif state == 'earlier':
y = 2mypy为此代码提供了以下错误:
$ mypy stackoverflow.py
stackoverflow.py:10: error: Cannot determine type of 'x'如何适当地注释这段代码,以便mypy能够正确地确定x的类型
我的问题不是如何重构代码。我知道,改变if state == ...块的顺序会解决问题,但出于各种原因,我需要保持当前的顺序。问题是,在给定这种结构时,如何使mypy确定类型。
发布于 2019-12-18 00:55:46
您能不能先声明一下它的值,以便初始化呢?就像你对静态类型化语言做的那样,比如C。
发布于 2019-12-18 01:54:02
为了清晰起见,我会把这个循环分成三个不同的循环,如果没有其他原因的话。
for i in range(3):
y = 2
for i in range(3,7):
x = y
print(y)
for i in range(7,10):
print(x)这完全消除了对state的需求,因为现在循环本身的顺序决定了您所处的状态。
另一种方法,如果您不喜欢硬编码的端点,而宁愿引用间隔大小,那么:
from itertools import islice
itr = iter(range(10))
for i in islice(itr, 3):
y = 2
for i in islice(itr, 4):
x = y
print(y)
for i in itr:
print(x)https://stackoverflow.com/questions/59384066
复制相似问题