如何在Python模块中使用主程序的循环计数器变量?
解决模块间循环计数器共享问题
你的问题核心是:模块拥有独立的命名空间,直接在day模块顶层代码中引用主程序的i,会因为找不到该变量报错。另外要注意,Python中import语句在第一次执行后会缓存模块,循环里多次import并不会重复执行模块的顶层代码,原来的写法本身逻辑就有问题。
下面给出几种可行的解决方式:
方法1:通过函数参数传递(推荐)
把day模块的逻辑封装成函数,主程序循环时把i作为参数传入,这是最符合模块化设计的方案。
主程序代码:
for i in range(3): import day day.print_result(i)
day模块代码:
def print_result(num): x = 3 + num print(x)
方法2:给模块命名空间手动赋值变量
先导入模块一次,之后在循环中给模块的命名空间添加i变量,模块内引用该变量时要明确指向模块自身的命名空间。
主程序代码:
import day for i in range(3): day.i = i day.print_result()
day模块代码:
i = 0 # 初始化默认值 def print_result(): x = 3 + i print(x)
方法3:重构为导入函数而非模块
直接从day模块导入函数,避免循环导入模块的冗余操作:
主程序代码:
from day import print_result for i in range(3): print_result(i)
day模块代码和方法1一致。
内容的提问来源于stack exchange,提问作者Dream Music
相关产品推荐
相关产品推荐

