Python Forum
Changing a variable's name on each iteration of a loop - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Changing a variable's name on each iteration of a loop (/thread-23500.html)



Changing a variable's name on each iteration of a loop - rix - Jan-03-2020

Is it possible in python to change the name of a variable on each iteration of a loop? For example:
for i in range(10):
    variableNameToChange+i="iterationNumber=="+str(i)
I know this won't work, and you can't assign to an operator, but how would you change / add to the name of a variable on each iteration of a loop, if it's possible?


RE: Changing a variable's name on each iteration of a loop - jefsummers - Jan-03-2020

You would be creating a debugging nightmare. But, if I was going to try such an abomination I would break out my copy of the Necronomicon and write code that writes itself. In more detail. Write a section of code that writes the modified Python code to a file. Then import the file and execute the code, which writes the next iteration to the file, imports, then executes, indefinitely. Possible endless loops that involve your hard drive, all kinds of odd things can happen. Black magic.


RE: Changing a variable's name on each iteration of a loop - rix - Jan-03-2020

(Jan-03-2020, 01:18 AM)jefsummers Wrote: You would be creating a debugging nightmare. But, if I was going to try such an abomination I would break out my copy of the Necronomicon and write code that writes itself. In more detail. Write a section of code that writes the modified Python code to a file. Then import the file and execute the code, which writes the next iteration to the file, imports, then executes, indefinitely. Possible endless loops that involve your hard drive, all kinds of odd things can happen. Black magic.
are you suggesting the use of the "open()" function?


RE: Changing a variable's name on each iteration of a loop - Clunk_Head - Jan-03-2020

(Jan-03-2020, 01:06 AM)rix Wrote: Is it possible in python to change the name of a variable on each iteration of a loop? For example:
for i in range(10):
    variableNameToChange+i="iterationNumber=="+str(i)
I know this won't work, and you can't assign to an operator, but how would you change / add to the name of a variable on each iteration of a loop, if it's possible?

You can totally make variable names dynamically. Python is infinitely reflective.

In this case you do not need to dig so deep though.

Just make a dictionary, use the variable names as keys and the intended. Then when you created all of the "variables" that you need, just update them to the locals "dictionary"(symbol table).

var_holder = {}

for i in range(10):
    var_holder['my_var_' + str(i)] = "iterationNumber=="+str(i)

locals().update(var_holder)

print(my_var_0)
Please note this solution does not require black magic, a unicorn, or an enchanted debugger.


RE: Changing a variable's name on each iteration of a loop - rix - Jan-03-2020

(Jan-03-2020, 03:41 AM)Clunk_Head Wrote:
(Jan-03-2020, 01:06 AM)rix Wrote: Is it possible in python to change the name of a variable on each iteration of a loop? For example:
for i in range(10):
    variableNameToChange+i="iterationNumber=="+str(i)
I know this won't work, and you can't assign to an operator, but how would you change / add to the name of a variable on each iteration of a loop, if it's possible?

You can totally make variable names dynamically. Python is infinitely reflective.

In this case you do not need to dig so deep though.

Just make a dictionary, use the variable names as keys and the intended. Then when you created all of the "variables" that you need, just update them to the locals "dictionary"(symbol table).

var_holder = {}

for i in range(10):
    var_holder['my_var_' + str(i)] = "iterationNumber=="+str(i)

locals().update(var_holder)

print(my_var_0)
Please note this solution does not require black magic, a unicorn, or an enchanted debugger.
I do not quite understand if you understand what I meant, or maybe I'm not advanced enough to completely understand what the code you have included in your reply does, but either way, this is a lot more complicated than I thought, and I only learned that dictionaries existed yesterday. Doh Maybe I'll just have to keep trying to understand it or become more familiar with dictionaries and then try and finish my task of trying to change a variable's name on each iteration of a loop.

Maybe the code you've sent does actually technically create variables with different names on each iteration, but it's not exactly what I was looking for, but I'll try to make it work as I was trying to do.


RE: Changing a variable's name on each iteration of a loop - Clunk_Head - Jan-03-2020

(Jan-03-2020, 03:52 AM)rix Wrote: I do not quite understand if you understand what I meant, or maybe I'm not advanced enough to completely understand what the code you have included in your reply does, but either way, this is a lot more complicated than I thought, and I only learned that dictionaries existed yesterday. Doh Maybe I'll just have to keep trying to understand it or become more familiar with dictionaries and then try and finish my task of trying to change a variable's name on each iteration of a loop.

Maybe the code you've sent does actually technically create variables with different names on each iteration, but it's not exactly what I was looking for, but I'll try to make it work as I was trying to do.

What are you trying to do?
Why do you need to change variable names at each iteration of a loop?
Do the variables already exist?


RE: Changing a variable's name on each iteration of a loop - perfringo - Jan-03-2020

If you are in learning process then you should learn this: don't create variables dynamically. Why? Presumably you want to access them dynamically as well.

If you need to create values dynamically use some other Python data structure: dictionary (as suggested by Clunk_Head) or namedtuple or list or something else.

You can learn how to create variables dynamically and why it's considered 'shooting yourself in the foot' from Why you don't want to dynamically create variables