我在python和....编码。
我有一个简单的问题。我试图通过调用某个函数重置全局数组的值但是有困难。这是我目前的代码:
CHOICES = (('1', 'First'), ('2', 'Second'))
def set_choices():
global CHOICES
CHOICES = (('3', 'Third'), ('4', 'Fourth'))
基本上我想做的是通过从其他函数调用函数来重置数组CHOICES。有没有办法做到这一点?
谢谢!
答案 0 :(得分:4)
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是不是一个好主意,我个人会建议你使用列表列表代替。有没有特别的理由使用集合而不是其他选项?
输出:
{('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。
答案 1 :(得分:1)
如果您想使用列表执行此操作,则无需使用global
关键字。
CHOICES = [('1', 'First'), ('2', 'Second')
def set_choices():
CHOICES[:] = (('3', 'Third'), ('4', 'Fourth'))
这将替换列表的内容而不更改引用。它通过切片分配工作。 CHOICES[:]
引用整个列表的一部分。