擅长:python、mysql、java
<p>每个Python模块都有自己的全局名称空间。这意味着在不同模块中,每个模块试图访问全局变量的代码将看到单独的变量。通过导入模块并与模块对象的属性交互,可以访问其他模块的全局变量</p>
<p>在您的代码中,<code>badcomp</code>模块中的<code>getlist</code>函数试图与多个全局变量交互,包括输出的<code>badx</code>和<code>bady</code>,输入的<code>data</code>和<code>list2</code>。它不起作用,因为您已经在交互式会话中定义了它们,该会话使用具有特殊名称<code>__main__</code>的模块名称空间</p>
<p>虽然<em>可以</em>从<code>badcomp</code>导入<code>__main__</code>,并通过模块的属性与其中定义的全局变量交互,但这将是一个非常糟糕的设计,因为如果以任何其他方式导入模块(例如,通过稍后编写的另一个模块导入),则该设计将不起作用。相反,函数可能应该使用在其自己的全局命名空间中定义的变量。<code>__main__</code>模块已经在导入<code>badcomp</code>(作为<code>bc</code>),如果将定义移动到模块中,则可以访问<code>badx</code>和<code>bady</code>等内容</p>
<p>或者,您可能会重新考虑全局变量是否是该函数工作的最佳方式。通常,使用参数和返回值将数据传入和传出函数比使用全局变量要好得多。也许<code>badx</code>和<code>bady</code>应该在结尾的<code>getlist</code>和<code>return</code>中定义。同时,<code>data</code>和<code>list2</code>可以作为参数添加到函数中</p>