全局变量使用不同函数的问题(使用Python)

时间:2018-01-17 11:45:03

标签: python list global-variables

我正在尝试创建一个程序,允许我在程序中的其他函数中使用我的列表'users'。 我已经尝试过参数,宣称它是“全局的”(虽然我已经被告知这样做是不好的做法)而且我已经尝试过研究“阶级”并实施它都无济于事。我也尝试将用户放入一个文本文件,然后从中读取,但这是一个麻烦,因为我需要它在列表中。 这是我的代码:

def register():
    global username
    username = raw_input("Enter a username: ").lower()
    firstName = raw_input("Enter your first name: ").lower()
    surname = raw_input("Enter your surname: ").lower()
    age = raw_input("Enter your age: ")
    yearGroup = raw_input("Enter your year group: ")
    users =[[firstName, surname, age, yearGroup]] 

def resultsFunction(): 
    score = 5
    results = [[score, username]]
    results.extend(users)

我试过了:

def register():
    global username
    username = raw_input("Enter a username: ").lower()
    firstName = raw_input("Enter your first name: ").lower()
    surname = raw_input("Enter your surname: ").lower()
    age = raw_input("Enter your age: ")
    yearGroup = raw_input("Enter your year group: ")
  global users
    users =[[firstName, surname, age, yearGroup]] 

它引发了错误:

    results.extend(userDetails)
NameError: global name 'userDetails' is not defined

奇怪的是,在声明用户名'global'之后(是的,我知道我不应该,但它有效),我能够在函数中使用用户名,但是当我尝试使用其他变量时,例如firstName所以我可以尝试在'resultsFunction'中创建列表它不起作用。

如果用户决定不注册,则寄存器功能不会一直运行但我无法更改,因为我不希望用户必须始终输入他们的详细信息。

我很困惑,并尝试过我所知道的一切。我作为最后的手段来到这里,所以我希望有人可以提供帮助,也许这个问题可以帮助其他人在本地和全局变量范围内遇到同样的困难。

1 个答案:

答案 0 :(得分:0)

在函数内部写global users以更改users变量中的值。否则你只能读它而不能改变里面的值。

lis = []
def a():
    lis = [1,2]
a()
print(lis)

将打印[]

其中:

lis = []
def a():
    global lis
    lis = [1,2]
a()
print(lis)

将打印[1,2]

根据我的理解参考你的程序..这可能会有所帮助..

username = ''
user = []
def register():
    global username
    global users
    username = input("Enter a username: ").lower()
    firstName = input("Enter your first name: ").lower()
    surname = input("Enter your surname: ").lower()
    age = input("Enter your age: ")
    yearGroup = input("Enter your year group: ")
    users =[[firstName, surname, age, yearGroup]]
def resultsFunction(): 
    score = 5
    results = [[score, username]]
    results.extend(users)
    print(results)
register()
resultsFunction()

将输出: -

Enter a username: Foo
Enter your first name: Bar
Enter your surname: Baz
Enter your age: 00
Enter your year group: 00
[[5, 'foo'], ['bar', 'baz', '00', '00']]