【问题标题】:Python global lists [closed]Python全局列表[关闭]
【发布时间】:2013-01-18 15:51:12
【问题描述】:

我正在学习 python,但在使用全局变量/列表时遇到了问题。我正在编写一个基本的hanoi手动塔程序,这是目前的程序:

pilar1 = [5,4,3,2,1,0]
pilar2 = [0,0,0,0,0,0]
pilar3 = [0,0,0,0,0,0]

def tower_of_hanoi():

    global pillar1
    global pillar2
    global pillar3

    print_info()

def print_info():

    global pillar1
    global pillar2
    global pillar3

    for i in range(4,-1,-1):
        print(pillar1[i], " ", pillar2[i], " ", pillar3[i])

我尝试了一些变体,但每次都收到错误“NameError: global name 'pillar1' is not defined”。

在此设置中处理全局列表的最佳方式是什么?如果可能的话,我宁愿只使用一个源文件。谢谢!

【问题讨论】:

  • 那些global 语句都没有做任何事情。摆脱它们。
  • 请注意,全局变量通常不是一个好主意 - 将值传递给您的函数并返回值 - 全局变量导致的问题比它们解决的问题更多。

标签: python list global


【解决方案1】:

这是因为您已将其“声明”为pilar1,而不是pillar1

【讨论】:

  • 啊,是的。总是简单的错误。谢谢!
  • 考虑接受这个作为解决方案。
【解决方案2】:

你遇到的问题是pilarpillar不一样。 修复该问题后,您将不再需要 global 声明:

pilar1 = [5,4,3,2,1,0]
pilar2 = [0,0,0,0,0,0]
pilar3 = [0,0,0,0,0,0]

def tower_of_hanoi():    
    print_info()

def print_info():    
    for i in range(4,-1,-1):
        print(pillar1[i], " ", pillar2[i], " ", pillar3[i])

只有在非全局范围内分配全局变量时才需要使用 global,例如函数定义:

# global variable, can be used anywhere within the file since it's
# declared in the global scope
my_int = 5

def init_list():
    # global variable, can be used anywhere within the file after
    # init_list gets called, since it's declared with "global" keyword
    global my_list
    my_list = [1, 2, 3]

def my_function():
    # local variable, can be used only within my_function's scope
    my_str = "hello"

    # init's global "my_list" variable here, which can then be used anywhere
    init_list()
    my_list.append(5)

my_function()
print(my_list)

但是你不应该过多地使用全局变量,而是使用函数参数来传递值。

【讨论】:

  • 这个有一个小问题,define 意味着只有当你创建一个新的全局变量时,这不是真的,它是 assignment到需要 global 关键字的全局变量。
  • 这么小的错误,我什至没有信心,但我会相信你并修复它。很好的收获:)
猜你喜欢
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多