【问题标题】:Global variable Issues with different functions (using Python)不同函数的全局变量问题(使用 Python)
【发布时间】:2018-01-17 11:45:03
【问题描述】:

我正在尝试创建一个程序,允许我在程序的不同功能中使用我的列表“用户”。 我已经尝试过参数,将其声明为“全局”(尽管有人告诉我这样做是不好的做法),并且我尝试过研究“类”并将其全部实施但无济于事。我也尝试将用户放入一个文本文件,然后从中读取,但这很麻烦,因为我需要将它放在一个列表中。 这是我的代码:

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

奇怪的是,在声明用户名“全局”之后(是的,我知道我不应该这样做,但它起作用了),我能够在函数中使用用户名,但是当我尝试使用其他变量时,例如firstName 所以我可以尝试在“resultsFunction”中简单地创建列表,但它不起作用。

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

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

【问题讨论】:

  • 请考虑添加代码示例,或修改您在此问题中发布的示例。就目前而言,它的格式和范围使我们很难为您提供帮助;这是一个great resource,可以帮助您开始。祝你的代码好运!
  • @ReblochonMasque 哎呀,对不起。我认为示例代码包含了您理解它所需的所有内容。非常抱歉,但我没有与此问题相关的任何其他代码。
  • global username作为你的register()函数的第一行,inside函数,然后再试一次。
  • @cdarke感谢您帮助改进我的问题。我已经编辑过了。够了吗?
  • 你看到我之前的评论了吗?我认为它现在应该可以工作了。但是我强烈建议您传递参数并返回结果,而不是使用全局变量。

标签: python list global-variables


【解决方案1】:

在函数内写入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']]

【讨论】:

  • 我刚试过这个。它不再抛出错误,但是当我打印 results = [[score, username]] results.extend(users) print results 它只打印分数和 userEntry: [['4', 'mary14']]
  • 我无法清楚地理解您的程序,但这是我的帮助。如果这对您有任何帮助,请告知。
  • 如果你想以[5, 'foo', 'bar', 'baz', '00', '00']这种格式输出,那么你可以将usersresults中的[[...]]替换为results[...]。这种格式应该能让你继续前进
  • 对不起,我是愚蠢的。它现在正在工作!我忘了实际再次通过注册功能哈哈。你对我帮助太大了!谢谢!!
猜你喜欢
  • 2014-05-15
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
相关资源
最近更新 更多