以下代码来自hackermeter.com,我不知道该怎么想。变量i是隐式传递给run()还是期望更多的修改而不仅仅是它指定的位置?
import sys
def run():
# Code here!
for i in range(int(sys.stdin.readline())):
run()
答案 0 :(得分:10)
我认为这是一种糟糕的编码习惯。 run()
访问i
的唯一原因是i
是全局的。
以下可以说是更好,因为它会强制程序员明确地将i
传递给run()
(如果需要):
import sys
def run():
# Code here!
def main():
for i in range(int(sys.stdin.readline())):
run()
if __name__ == '__main__':
main()
答案 1 :(得分:3)
这是问题中的代码:
import sys
def run():
# Code here!
for i in range(int(sys.stdin.readline())):
run()
i
在全局范围内定义(即在模块的顶层),因此可以在run
内访问。这是因为基本上只有函数和类引入了一个新的局部作用域,因此迭代变量是其封闭作用域的正常变量。
如果run
访问i
,如果尚未定义i
,则会产生错误的可能性(例如,如果条件语句阻止循环执行) 。