for i in range(10):
s = 5
for j in range(10):
s = min(s)
上面的代码在第二行的IntelliJ中给出了这个问题的标题。“上面定义的没有使用的重新声明的定义”
我敢肯定,警告的发生是因为在CFG中,由于嵌套循环,可能有两个连续写入(无间隔读取)到s
。到目前为止,我一直忽视这个警告,但为了保证安全,我想请求确认我的假设。
for i in range(10):
s = 5
for j in range(10):
s = min(s)
上面的代码在第二行的IntelliJ中给出了这个问题的标题。“上面定义的没有使用的重新声明的定义”
我敢肯定,警告的发生是因为在CFG中,由于嵌套循环,可能有两个连续写入(无间隔读取)到s
。到目前为止,我一直忽视这个警告,但为了保证安全,我想请求确认我的假设。
你的假设几乎是正确的。名称s
被绑定为一个整数,其值从未在封闭循环中使用或更改,但它在嵌套循环中反弹到另一个值(,尽管这会引起错误)。请注意,第一个赋值不会随着外部for
循环的迭代而改变。
IDE的警告建议循环内的第一个赋值是不必要的,因为s
从未更改过。该转让可能也已经好放在for
循环,这将防止重复绑定和重新绑定外:
s = 5
for i in range(10):
...
据它说是。 您可以在不使用或定义它的情况下重新制作一些内容。 像我,例如:
def car(e):
color = "blue"
print(color)
def car(r):
错误,我重新定义功能,不能这样做,因为据我所知,我没有做它做任何事情。 以为我在使用这个函数,没有意识到我正在重新定义它。
校正
def car(e):
color = "blue"
print(color)
car(e)
你留着,而从来没有使用其分配值's'。 IDE指出没有理由这样做 –
这似乎是一个合理的假设。既然你总是在s = 5之后运行'for'循环,那么这段代码是多余的。如果你列举了一些可能为空的列表,那么将有一个初始化s的理由(即使这样,'else'子句会更好),但不在这里。 – tdelaney