【问题标题】:Resetting Values in Global array within a Function python在函数python中重置全局数组中的值
【发布时间】:2023-03-12 01:30:01
【问题描述】:

我正在使用 python 和 ....

编码

我有一个简单的问题。我正在尝试通过调用某个函数来重置全局数组的值,但遇到了困难。这是我目前的代码:

CHOICES = (('1', 'First'), ('2', 'Second'))

def set_choices():
    global CHOICES
    CHOICES = (('3', 'Third'), ('4', 'Fourth'))

基本上我想做的是通过从其他函数调用函数来重置数组 CHOICES。有没有办法做到这一点?

谢谢!

【问题讨论】:

  • 你想要的和你已经写的有什么不同?我觉得我错过了一些东西。
  • 你真的在你的程序中调用了你的函数set_choices()吗?还是缺少其他一些信息?你的 CHOICES 应该是一个列表还是一个集合?
  • 是的,我确实在我的原始程序中调用了 set_choices()。是的,它应该是一个集合。我正在做的是在一个函数中调用 set_choices() 。然后在另一个文件中导入数组 CHOICES。当我在第一个函数中调用 set_choices 然后在下一个函数中导​​入数组时,更改并没有真正转移......
  • 元组是不可变的,你需要使用列表
  • 否则,如果对元组有特殊要求,则需要使用元组列表来执行此操作。不是元组的元组。

标签: python arrays global-variables reset


【解决方案1】:
myObject = [('1', 'First'), ('2', 'Second')] 
CHOICES = set(myObject)

def set_choices():
    global CHOICES
    CHOICES.clear() # Remove the element from set CHOICES
    # Do some of your changes here
    anotherObject = [('3', 'Third'), ('4', 'Fourth')]
    CHOICES[:] = set(anotherObject)


print(CHOICES) # Before calling set_choices
set_choices()
print(CHOICES) # After you calling set_choices

我认为这会奏效。但我不知道使用 set 和 tuple 是否是一个好主意,我个人建议你使用 list of list 来代替。是否有特别的理由使用集合而不是其他选项?

输出:

{('2', 'Second'), ('1', 'First')}
{('4', 'Fourth'), ('3', 'Third')}

回复您的评论以使用列表:

CHOICES = [['1', 'First'], ['2', 'Second']]

def set_choices():
    # Changed since the comment of another member aaronasterling
    # Removed the use of global
    CHOICES[:] = [['3', 'Third'], ['4', 'Fourth']]

print(CHOICES)
set_choices()
print(CHOICES)

输出:

[['1', 'First'], ['2', 'Second']]
[['3', 'Third'], ['4', 'Fourth']]

要了解有关切片分配的更多信息,请查看此SO question & answer

【讨论】:

  • 我想我的意思是一个列表。但我也只是将它作为一个数组尝试过,它也不起作用:/
【解决方案2】:

如果您想使用列表执行此操作,则不需要 global 关键字。

CHOICES = [('1', 'First'), ('2', 'Second')

def set_choices():
    CHOICES[:] = (('3', 'Third'), ('4', 'Fourth'))

这将替换列表的内容而不更改引用。它通过切片分配工作。 CHOICES[:] 引用了整个列表的一部分。

【讨论】:

    猜你喜欢
    • 2014-07-26
    • 2015-04-23
    • 1970-01-01
    • 2016-08-26
    • 2017-10-09
    • 2021-02-14
    • 2017-08-07
    • 2020-02-01
    • 2013-03-24
    相关资源
    最近更新 更多