gpt4 book ai didi

python - 处理模块中未定义的全局(python)

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:35 25 4
gpt4 key购买 nike

所以我有一些像这样的Python代码

import mymodule

sum_global= mymodule.populateGlobalList("bigdict.txt")

等等...mymodule中的代码包括方法

def populateGlobalList(thefile):
#do the stuff

到目前为止一切顺利。

但是在mymodule的其他地方我有一个方法说

def usefulFunction(arg1, arg2):
#lotsofstuff
if arg1 not in sum_global:
#add to list

因此解释器会在未定义的 sum_global 上出错,这是有道理的。现在,usefulFunction 可以将 sum_global 作为参数,至少在理论上是这样。但是 sum_global 是一本英语词典,广泛用于检查遇到的单词是否是英语单词(或至少拼写正确)。由于这种情况经常发生,因此将其本地化会感到不必要的尴尬。

另一方面,只需在模块中声明一个全局 sum_global (本质上是为了欺骗解释器),目的是在导入 mymodule 的程序中填充这个空容器。强>,感觉完全错误。

针对这种情况的声音设计是什么?

最佳答案

每个模块都有自己的全局命名空间。您将 sum_global 添加到了错误的模块,它不在 mymodule 中。

sum_global 放入 mymodule 中,或者将其作为参数传递给需要它的函数。

听起来好像您想推迟计算 sum_global 值,直到获得文件名为止;你可以让 populateGlobalList() 在此处设置全局;这一切都在 mymodule 中:

sum_global = None

def populateGlobalList(filename):
global sum_global
if sum_global is None:
sum_global = "result of your population work"

该函数不返回数据,它设置模块中的全局变量(假设尚未设置)。

但是,您应该尝试避免创建这样的全局变量。由于模块的用户必须提供文件名,因此如果用户代码跟踪 populateGlobalList() 调用的结果并显式将其传递到有用函数( )` 调用:

import mymodule

sum_global = mymodule.populateGlobalList("bigdict.txt")

result = mymodule.usefulFunction(arg1, arg2, sum_global)

并重新调整usefulFunction()以需要这样的参数。

下一步是让您的模块为此使用:

class MyClass(object):
def __init__(self, filename):
self._populate()

def _populate(self):
self.sum = "result of your population work"

def useful_function(self, arg1, arg2):
# do work with self.sum

然后在任何地方使用该类:

 interesting_object = mymodule.MyClass('bigdict.txt')
result = interesting_object.useful_function(arg1, arg2)

关于python - 处理模块中未定义的全局(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36937116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com