0

我在下面的代码中更改了全局变量。我读过的大部分内容都说过要远离全局变量...在下面的示例中,我想使用“make_lists”然后将其打印在“print_list”中,然后清除列表。我使用全局变量来做到这一点,关于如何避免全局变量的建议?

我知道我可以将所有这些都添加到一个函数中,但这都是更大函数的一部分,这是我唯一遇到问题的部分。预先感谢。

x_lst = []

def make_lists():
    global x_lst

    x_lst.append("Hello")

def print_list():
    global x_lst

    for i in x_lst:
        print(i)

    x_lst = []

def main():
    make_lists()
    print_list()

if __name__ =="__main__":
    main()
4

4 回答 4

2

为了避免使用全局,你必须return在函数声明中使用关键字来返回一个值,在我们的例子中,这将是你新创建的列表。您还必须arguments在函数声明中使用,它们是函数中值的占位符。因此,您不需要全局值的原因是您将列表从一个函数传递到另一个函数。

def make_lists():
    return ['Hello']  # Your are creating the list with a single value,
                      # and return it

def print_list(ls):
    for i in ls:      # You are iterating thru the list,
        print(i)      # which is the input of this function

def main():
    print_list(make_lists())  # In your main function you call the make_list()
                              # which will return the newly created list, and
                              # pass it to print_list, which will iterate thru
                              # the list and prints your values out

if __name__ =="__main__":
    main()
于 2013-08-19T23:53:12.937 回答
1
def make_list():
    return ['Hello']

def print_list(l):
    for x in l:
        print(x)

def main():
    print_list(make_list())

将数据传递到带参数的函数中,并通过返回值传递数据。

于 2013-08-19T23:54:03.020 回答
1

这是我的简单建议,为什么不给函数输入。传递一个列表来打印而不是使用全局变量是一个简单的选择。如果您正在寻找一种方法来保持特定范围的状态,可以尝试将这些函数放在一个类中(换句话说,使用 OOP)

全局变量的问题在于,当您将“x_lst”声明为全局变量时,它会将“x_lst”打开到函数外部,这可能不是您的预期目标。

于 2013-08-20T00:01:52.870 回答
0

我对您的代码进行了最少的更改,以说明如何传递您的列表而不是使用全局。希望这有助于澄清。

def make_lists(x_lst):
    x_lst.append("Hello")

def print_list(x_lst):
    for i in x_lst:
        print(i)

def main():
    x_lst = []

    make_lists(x_lst)
    print_list(x_lst)

if __name__ =="__main__":
    main()
于 2013-08-19T23:53:43.273 回答