给定Python代码如
def func():
for i in range(10):
pass
for i in range(10):
pass
Run Code Online (Sandbox Code Playgroud)
pylint抱怨
Redefining name 'i' from outer scope
Run Code Online (Sandbox Code Playgroud)
什么是Pythonic写上面的方法?在本地使用不同的变量,比方说j?
但是,当变量在两种情况下(i对于索引)意味着完全相同时,为什么呢.假设我将所有本地索引更改为j,然后我发现我想j用作glocal范围中的第二个索引.要改变一下吗?
我无法禁用lint警告,我不想拥有它们,我想写Pythonic,但我想在同样的事情中使用相同的名称,在上面的简单情况下.这不可能吗?
Rob*_*obᵩ 26
您可以通过不使用任何全局变量来避免全局变量冲突:
def func():
for i in range(10):
pass
def _init_func():
for i in range(10):
pass
_init_func()
Run Code Online (Sandbox Code Playgroud)
任何需要在模块初始化时运行的代码都可以放在一个函数中.这留下了作为模块init:def语句,class语句和一个函数调用期间运行的唯一可执行代码.
同样,如果您的代码不是要import编辑的,而是要运行的脚本,
def func():
for i in range(10):
pass
def main():
for i in range(10):
pass
if __name__=="__main__":
main()
Run Code Online (Sandbox Code Playgroud)
linter 会发出警告,因为i如果它至少运行一次,它就会在循环之后继续存在。这意味着,如果您要使用它而不重新初始化它,它仍然具有上次循环迭代期间的值。
你使用它的方式很好,因为它i总是会被重新初始化。
一种有用的做法是将外部范围中的所有值命名为ALL_CAPS. 这样就不会出错了。
这个答案被正确地确定为错误的。请参阅: https: //stackoverflow.com/a/25072186