Как переназначить несколько переменных (если возможно) с помощью итератора в Python 3Python

Программы на Python
Anonymous
Как переназначить несколько переменных (если возможно) с помощью итератора в Python 3

Сообщение Anonymous »

обновление Добавляю пример использования, чтобы лучше объяснить, почему я пытаюсь вызвать такое поведение. См. обновление в конце сообщения. Добавлен улучшенный синтаксис для ссылок и добавлена ​​ссылка на статью, предложенную в качестве ответа.
Я пытаюсь использовать итератор, чтобы изменить значение списка переменных.

Код: Выделить всё

>>> a = 1
>>> b = 2
>>> c = 3
>>> for i in [a,b,c]:
i += 1
>>> a,b,c #Expecting (2, 3, 4)
(1, 2, 3)
Похоже, это не работает, я пробовал другие способы (см. ниже), но безуспешно.
  • Кто-нибудь подскажет мне лучший способ решения этой проблемы?
  • Кто-нибудь объяснит, почему приведенный выше пример не работает так, как я ожидал?
  • Кто-нибудь скажет мне, как/где я мог найти № 2 в справочной документации Python?
Места, где я раньше искал ответы...< /p>
Вопрос StackOverflow «переназначить переменную исходному значению, определенному перед циклом в начале каждого»
Вопрос StackOverflow о переназначении переменных (но не списка переменные)
Документация Python: объекты и типы значений
Раздел 3.1.3 документации Python
Я чувствую как будто последняя ссылка на документацию по Python может дать ответ, но я был ошеломлен количеством информации, мой мозг устал, и я надеюсь, что кто-нибудь из кого-нибудь из них сможет это сделать. может помочь.
тоже пробовал...

Код: Выделить всё

>>> help(__name__)
Help on module __main__:

NAME
__main__

DATA
__annotations__ = {}
a = 1
b = 2
c = 3
i = 4

FILE
(built-in)
но, во всяком случае, это меня только еще больше запутало.
Наконец-то я попробовал...

Код: Выделить всё

>>> a = 1
>>> b = 2
>>> c = 3
>>> R = [a, b, c]
>>> for i in range(3):
R[i] += 1

>>> a, b, c #Hoping for (2, 3, 4)
(1, 2, 3)
>>> R #Kind of expected (1, 2, 3) based on the above behavior
[2, 3, 4]
обновление
Я использовал список для удобства, так как мог перебирать его элементы. Я не понимаю, что когда я говорю...

Код: Выделить всё

>>> x = [a, b, c]
Я создаю такой список, что

Код: Выделить всё

x = [the value assigned to a,
the value assigned to b,
the value assigned to c]
а не
x = [переменная a, переменная b, переменная c]
поэтому, когда я пытаюсь использовать синтаксис

Код: Выделить всё

>>> x[0] += 1 #take the current ITEM in place 0 and increment its value by 1.
вместо

Код: Выделить всё

>>> a += 1
вместо этого оно интерпретируется как...
берем текущее ЗНАЧЕНИЕ ЭЛЕМЕНТА вместо 0,
увеличиваем это ЗНАЧЕНИЕ на 1,
это новое ЗНАЧЕНИЕ ITEM на месте 0...
и я теряю ссылку на исходный ITEM... переменную a.
Здесь это пример использования того, почему я пытаюсь вызвать такое поведение...

Код: Выделить всё

>>> class breakfast():
>>>     def __init__(self, eggs=None, bacon=None, spam=None):
>>>        self.eggs = eggs
>>>        self.bacon = bacon
>>>        self.spam = spam
>>>        updateOrder = False
>>>        updateItems = []
>>>        for i in [self.eggs, self.bacon, self.spam]:
>>>             if i == None:
>>>                 updateOrder = True
>>>                 updateItems.append(i)
>>>             else:
>>>                 pass
>>>         if updateOrder:
>>>             self.updateOrder(itemsToUpdate = updateItems)
>>>
>>>    def updateOrder(self, itemsToUpdate):
>>>        for i in itemsToUpdate: ###also tried...
>>>     ###for i in range(len(itemsToUpdate)):
>>>            print('You can\'t order None, so I am updating your order to 0 for some of your items.')
>>>            i = 0
>>>         ###itemsToUpdate[i] = 0
>>>
>>> #Finally, the good part, behavior I'm after...
>>> myBreakfast = breakfast(eggs=2,bacon=3)

You can't order None, so I am updating your order to 0 for some of your items.
>>> myBreakfast.spam == 0 #hoping for True....
False
Единственный известный мне способ добиться такого поведения — это сказать...

Код: Выделить всё

>>>     ...
>>>     def updateOrder(self):
>>>         orderUpdated=False
>>>         if self.eggs == None:
>>>             self.eggs = 0
>>>             orderUpdated = True
>>>         if self.bacon == None:
>>>             self.bacon = 0
>>>             orderUpdated = True
>>>         if self.spam == None:
>>>             self.spam = 0
>>>             orderUpdated = True
>>>         if orderUpdated:
>>>             print('You can\'t order None, so I am updating your order')
Однако, если в меню (намного) больше трех элементов, код updateOrder станет очень длинным и хуже. > повторяющийся.

Подробнее здесь: https://stackoverflow.com/questions/615 ... n-python-3

Вернуться в «Python»