3

下面的代码来自hackermeter.com,我不知道该怎么想。变量 i 是否被隐式传递给 run() 或者它是否期望比它指定的位置进行更多的修改?

import sys

def run():
   # Code here!

for i in range(int(sys.stdin.readline())):
   run()
4

2 回答 2

10

我认为这是一种糟糕的编码实践。唯一run()可以访问的i原因i是全球性的。

以下可以说更好,因为它将强制程序员显式传递irun()如果需要):

import sys

def run():
   # Code here!

def main():
   for i in range(int(sys.stdin.readline())):
      run()

if __name__ == '__main__':
   main()
于 2013-08-28T14:20:08.547 回答
3

这是问题中的代码:

import sys

def run():
   # Code here!

for i in range(int(sys.stdin.readline())):
   run()

i在全局范围内定义(即在模块的顶层),因此可以在run. 这是因为本质上只有函数和类引入了新的局部作用域,所以迭代变量是其封闭作用域的普通变量。

如果run确实访问,则如果尚未定义(例如,如果条件语句完全阻止循环执行),i则可能会产生错误。i

于 2013-08-28T14:26:53.900 回答