Я пытаюсь использовать итератор, чтобы изменить значение списка переменных.
Код: Выделить всё
>>> 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?
Вопрос 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')
Подробнее здесь: https://stackoverflow.com/questions/615 ... n-python-3