Сброс значений в глобальном массиве внутри Python функции - PullRequest
2 голосов
/ 02 апреля 2012

Я пишу на Python и ....

У меня быстрый вопрос. Я пытаюсь сбросить значения глобального массива, вызвав определенную функцию, но у меня возникли трудности. Вот мой код на данный момент:

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

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

По сути, я хочу сбросить массив CHOICES, вызвав функцию из какой-то другой функции. Есть способ сделать это?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 02 апреля 2012
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. Есть ли конкретная причина использовать набор вместо других параметров?

Выход:

{('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']]

Чтобы узнать больше о назначении срезов, прочитайте этот ТАК вопрос и ответ .

1 голос
/ 02 апреля 2012

Если вы хотите сделать это со списком, вам не нужно ключевое слово global.

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

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

Это заменит содержимое списка без изменения ссылки. Работает по назначению среза. CHOICES[:] ссылается на фрагмент всего списка.

...