下面的代码来自hackermeter.com,我不知道该怎么想。变量 i 是否被隐式传递给 run() 或者它是否期望比它指定的位置进行更多的修改?
import sys
def run():
# Code here!
for i in range(int(sys.stdin.readline())):
run()
下面的代码来自hackermeter.com,我不知道该怎么想。变量 i 是否被隐式传递给 run() 或者它是否期望比它指定的位置进行更多的修改?
import sys
def run():
# Code here!
for i in range(int(sys.stdin.readline())):
run()
我认为这是一种糟糕的编码实践。唯一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()
这是问题中的代码:
import sys
def run():
# Code here!
for i in range(int(sys.stdin.readline())):
run()
i
在全局范围内定义(即在模块的顶层),因此可以在run
. 这是因为本质上只有函数和类引入了新的局部作用域,所以迭代变量是其封闭作用域的普通变量。
如果run
确实访问,则如果尚未定义(例如,如果条件语句完全阻止循环执行),i
则可能会产生错误。i