Python中的隐式参数传递?

时间:2013-08-28 14:13:50

标签: python

以下代码来自hackermeter.com,我不知道该怎么想。变量i是隐式传递给run()还是期望更多的修改而不仅仅是它指定的位置?

import sys

def run():
   # Code here!

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

2 个答案:

答案 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,则会产生错误的可能性(例如,如果条件语句阻止循环执行) 。