0

file_one.py 的内容:

from file_two import *

def function_one():
    my_list = []
    function_two()

function_one()

file_two.py 的内容:

def function_two():
    my_list.append(1)
    print my_list

运行“file_one.py”时出错:

NameError: global name 'my_list' is not defined

上面的示例是我实际尝试实现的简化版本,但是它会产生相同的错误,我相信它复制了相同的逻辑。

在实际实现中,作为一个新手,我将一个充满函数的文件 (file_two.py) 导入到 file_one.py 中,然后当我想调用它时只使用 file_one.py 中的函数名。

这工作得很好,直到我不得不在 file_two.py 的函数中使用 file_one.py 中的函数的变量(如上所示)。因此,我需要了解课程。

这似乎是对类的非常简洁的描述和实现:

https://stackoverflow.com/a/10139935/1063287

但是我不需要(我目前可以看到)需要使用类中的函数,只是一个变量。

我被困在这里想我是否只需要创建一个更简单的类文件(没有函数),如果是这样:

  • 它需要什么(关于语法等)?
  • 我将如何从其他地方引用其中的变量(再次涉及语法等)?
4

2 回答 2

0

正如所指出的,类的使用不是必需的,那么下面的代码确实很差,但让您了解“如何使用类访问变量”

def function_two():
    function_one.my_list.append(1)
    print function_one.my_list


class function_one():
    my_list = [] 
    @staticmethod
    def __call__():
        function_one.my_list = []
        function_two()
function_one = function_one()

现在函数一的行为就像一个函数,并且有一个属性 my_list 可以从外部访问。

但是您应该考虑将 my_list 作为参数传递给 finction_two ...

于 2013-04-30T10:37:28.000 回答
0

我不认为类的使用对于实现某种状态是必不可少的:

状态.py:

my_list = []

file_two.py:

import state

def function_two():
    state.my_list.append(2)
    print state.my_list

file_one.py:

from file_two import function_two
import state

def function_one():
    state.my_list.append(1)
    function_two()

function_one()
# this will print out [1, 2]

当然你也可以使用类,但听起来你并不真的需要。

我建议不要使用global它,尽管它可以工作,但我发现它不太清楚变量的来源。

更新:

当然,如果您只想从function_one可用的变量中创建一个变量,function_two您可以随时将其作为参数传递,如下所示:

file_two.py

def function_two(some_list):
    some_list.append(2)
    print some_list

file_one.py

from file_two import function_two

def function_one():
    my_list = []
    my_list.append(1)
    function_two(my_list)

function_one()
# [1, 2]

对象和类非常强大,但它们不是编写结构良好/可扩展的代码所必需的(这是为了解决您在上面的评论中表达的担忧)。传递参数是 Python 编程的基本组成部分,无论你是在制作一个非常基本的还是非常复杂的应用程序,你都应该发现自己一直在使用它。

于 2013-04-30T10:27:31.410 回答