如何从Python for循环中获取变量并传递至另一个文件
解决方案:跨文件传递循环变量并打印
原代码核心问题
print_this_variable是Main.list()方法的局部变量,作用域仅限于方法内部,外部模块无法直接访问。Main.list()方法定义不规范:既没有self参数(实例方法要求),也没有@staticmethod装饰器(静态方法要求),无法正常调用。- 循环中每次覆盖变量值,即使能访问也只能拿到最后一个元素
"g",无法实现遍历打印所有元素的需求。
方法一:让方法返回列表,在调用端遍历打印
修改forloop.py,让方法返回完整列表:
class Main: @staticmethod def get_list(): return ["a","b","c","d","e","f","g"]
在print.py中调用方法并遍历打印:
from forloop import Main for item in Main.get_list(): print(item)
方法二:用生成器逐个返回元素
修改forloop.py,将方法定义为生成器,逐个产出元素:
class Main: @staticmethod def iterate_list(): my_list = ["a","b","c","d","e","f","g"] for i in my_list: yield i
在print.py中遍历生成器并打印:
from forloop import Main for var in Main.iterate_list(): print(var)
方法三:通过类属性传递(不推荐,仅作演示)
如果一定要通过类属性传递变量,可修改forloop.py:
class Main: print_this_variable = None @staticmethod def iterate_list(): my_list = ["a","b","c","d","e","f","g"] for i in my_list: Main.print_this_variable = i yield Main.print_this_variable
print.py中调用并打印:
from forloop import Main for var in Main.iterate_list(): print(var)
注意:类属性是全局共享的,多线程或多次调用场景下容易出现值覆盖,不符合面向对象的封装原则,不推荐使用。
内容的提问来源于stack exchange,提问作者A_GUY_WITH_PC
相关产品推荐
相关产品推荐

