How do I create a variable number of variables?How can you dynamically create variables via a while loop?Using a string variable as a variable nameHow to get the value of a variable given its name in a string?generating variable names on fly in pythonChanging variable names with Python for loopsReturn a variable by name from a function in PythonHow to increment variable names/Is this a bad ideaHow can I create lists from a list of strings?In python create a list with a variable in the nameHow to use string value as a variable name in Python?How do I merge two dictionaries in a single expression?How do I check if a list is empty?How do I check whether a file exists without exceptions?How can I safely create a nested directory?How do I return multiple values from a function?Using global variables in a functionGetting the class name of an instance?How do I sort a dictionary by value?How do I pass a variable by reference?How do I list all files of a directory?

A variation on Caesar

What type of beer is best for beer battered fish?

Basic Accidental Question

How to present boolean options along with selecting exactly 1 of them as "primary"?

What are these criss-cross patterns close to Cambridge Airport (UK)?

Hole in PCB due to corrosive reaction?

How do the Martian rebels defeat Earth when they're grossly outnumbered and outgunned?

"Chess is 90% tactics" - should a player focus more on tactics in order to improve?

How does the sorcerer's Careful Spell Metamagic option work with the Thunderwave spell?

Google just EOLed the original Pixel. How long until it's a brick?

Pi to the power y, for small y's

What information could a Time Traveller give to the Germans to make them win the war?

Need Good OOP Design For World and Countries Problem

What's the name of the role of characters who buff teammates?

Is there a way to realize a function of type ((a -> b) -> b) -> Either a b?

How do I resolve science-based problems in my worldbuilding?

Fake TL072/TL074 IC's - how does the economics of it work?

Are the EVA suits used in the ISS and in the NBL same or different?

Very high precision zero crossing detection

A question about the に in this sentence

Why are Democrats mostly focused on increasing healthcare spending, rarely mentioning any proposals for decreasing the costs of healthcare services?

An historical mystery : Poincaré’s silence on Lebesgue integral and measure theory?

What is the meaning of Text inside of AMS logo

count network interfaces in bash



How do I create a variable number of variables?


How can you dynamically create variables via a while loop?Using a string variable as a variable nameHow to get the value of a variable given its name in a string?generating variable names on fly in pythonChanging variable names with Python for loopsReturn a variable by name from a function in PythonHow to increment variable names/Is this a bad ideaHow can I create lists from a list of strings?In python create a list with a variable in the nameHow to use string value as a variable name in Python?How do I merge two dictionaries in a single expression?How do I check if a list is empty?How do I check whether a file exists without exceptions?How can I safely create a nested directory?How do I return multiple values from a function?Using global variables in a functionGetting the class name of an instance?How do I sort a dictionary by value?How do I pass a variable by reference?How do I list all files of a directory?






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty
margin-bottom:0;









308

















How do I accomplish variable variables in Python?



Here is an elaborative manual entry, for instance: Variable variables



I have heard this is a bad idea in general though, and it is a security hole in Python. Is that true?










share|improve this question























  • 25





    it's the maintainance and debugging aspects that cause the horror. Imagine trying to find out where variable 'foo' changed when there's no place in your code where you actually change 'foo'. Imagine further that it's someone else's code that you have to maintain... OK, you can go to your happy place now.

    – glenn jackman
    Sep 3 '09 at 14:28






  • 3





    A further pitfall that hasn't been mentioned so far is if such a dynamically-created variable has the same name as a variable used in your logic. You essentially open up your software as a hostage to the input it is given.

    – holdenweb
    Dec 19 '14 at 10:50











  • All the responses here assume you have access to the base variables you want to access dynamically by name, which is not always the case. I think the most general approach to reproduce the example behaviour in PHP is to use eval() like this: var_name = 'foo'; bar = 5; output = eval(var_name)

    – Luis Vazquez
    Oct 23 at 17:18


















308

















How do I accomplish variable variables in Python?



Here is an elaborative manual entry, for instance: Variable variables



I have heard this is a bad idea in general though, and it is a security hole in Python. Is that true?










share|improve this question























  • 25





    it's the maintainance and debugging aspects that cause the horror. Imagine trying to find out where variable 'foo' changed when there's no place in your code where you actually change 'foo'. Imagine further that it's someone else's code that you have to maintain... OK, you can go to your happy place now.

    – glenn jackman
    Sep 3 '09 at 14:28






  • 3





    A further pitfall that hasn't been mentioned so far is if such a dynamically-created variable has the same name as a variable used in your logic. You essentially open up your software as a hostage to the input it is given.

    – holdenweb
    Dec 19 '14 at 10:50











  • All the responses here assume you have access to the base variables you want to access dynamically by name, which is not always the case. I think the most general approach to reproduce the example behaviour in PHP is to use eval() like this: var_name = 'foo'; bar = 5; output = eval(var_name)

    – Luis Vazquez
    Oct 23 at 17:18














308












308








308


81






How do I accomplish variable variables in Python?



Here is an elaborative manual entry, for instance: Variable variables



I have heard this is a bad idea in general though, and it is a security hole in Python. Is that true?










share|improve this question

















How do I accomplish variable variables in Python?



Here is an elaborative manual entry, for instance: Variable variables



I have heard this is a bad idea in general though, and it is a security hole in Python. Is that true?







python variable-variables






share|improve this question
















share|improve this question













share|improve this question




share|improve this question








edited Mar 22 '17 at 16:21









Taryn

202k47 gold badges306 silver badges366 bronze badges




202k47 gold badges306 silver badges366 bronze badges










asked Sep 3 '09 at 12:37







PyornidePyornide

















  • 25





    it's the maintainance and debugging aspects that cause the horror. Imagine trying to find out where variable 'foo' changed when there's no place in your code where you actually change 'foo'. Imagine further that it's someone else's code that you have to maintain... OK, you can go to your happy place now.

    – glenn jackman
    Sep 3 '09 at 14:28






  • 3





    A further pitfall that hasn't been mentioned so far is if such a dynamically-created variable has the same name as a variable used in your logic. You essentially open up your software as a hostage to the input it is given.

    – holdenweb
    Dec 19 '14 at 10:50











  • All the responses here assume you have access to the base variables you want to access dynamically by name, which is not always the case. I think the most general approach to reproduce the example behaviour in PHP is to use eval() like this: var_name = 'foo'; bar = 5; output = eval(var_name)

    – Luis Vazquez
    Oct 23 at 17:18













  • 25





    it's the maintainance and debugging aspects that cause the horror. Imagine trying to find out where variable 'foo' changed when there's no place in your code where you actually change 'foo'. Imagine further that it's someone else's code that you have to maintain... OK, you can go to your happy place now.

    – glenn jackman
    Sep 3 '09 at 14:28






  • 3





    A further pitfall that hasn't been mentioned so far is if such a dynamically-created variable has the same name as a variable used in your logic. You essentially open up your software as a hostage to the input it is given.

    – holdenweb
    Dec 19 '14 at 10:50











  • All the responses here assume you have access to the base variables you want to access dynamically by name, which is not always the case. I think the most general approach to reproduce the example behaviour in PHP is to use eval() like this: var_name = 'foo'; bar = 5; output = eval(var_name)

    – Luis Vazquez
    Oct 23 at 17:18








25




25





it's the maintainance and debugging aspects that cause the horror. Imagine trying to find out where variable 'foo' changed when there's no place in your code where you actually change 'foo'. Imagine further that it's someone else's code that you have to maintain... OK, you can go to your happy place now.

– glenn jackman
Sep 3 '09 at 14:28





it's the maintainance and debugging aspects that cause the horror. Imagine trying to find out where variable 'foo' changed when there's no place in your code where you actually change 'foo'. Imagine further that it's someone else's code that you have to maintain... OK, you can go to your happy place now.

– glenn jackman
Sep 3 '09 at 14:28




3




3





A further pitfall that hasn't been mentioned so far is if such a dynamically-created variable has the same name as a variable used in your logic. You essentially open up your software as a hostage to the input it is given.

– holdenweb
Dec 19 '14 at 10:50





A further pitfall that hasn't been mentioned so far is if such a dynamically-created variable has the same name as a variable used in your logic. You essentially open up your software as a hostage to the input it is given.

– holdenweb
Dec 19 '14 at 10:50













All the responses here assume you have access to the base variables you want to access dynamically by name, which is not always the case. I think the most general approach to reproduce the example behaviour in PHP is to use eval() like this: var_name = 'foo'; bar = 5; output = eval(var_name)

– Luis Vazquez
Oct 23 at 17:18






All the responses here assume you have access to the base variables you want to access dynamically by name, which is not always the case. I think the most general approach to reproduce the example behaviour in PHP is to use eval() like this: var_name = 'foo'; bar = 5; output = eval(var_name)

– Luis Vazquez
Oct 23 at 17:18













13 Answers
13






active

oldest

votes


















262


















You can use dictionaries to accomplish this. Dictionaries are stores of keys and values.



>>> dct = 'x': 1, 'y': 2, 'z': 3
>>> dct
'y': 2, 'x': 1, 'z': 3
>>> dct["y"]
2


You can use variable key names to achieve the effect of variable variables without the security risk.



>>> x = "spam"
>>> z = x: "eggs"
>>> z["spam"]
'eggs'


For cases where you're thinking of doing something like



var1 = 'foo'
var2 = 'bar'
var3 = 'baz'
...


a list may be more appropriate than a dict. A list represents an ordered sequence of objects, with integer indices:



l = ['foo', 'bar', 'baz']
print(l[1]) # prints bar, because indices start at 0
l.append('potatoes') # l is now ['foo', 'bar', 'baz', 'potatoes']


For ordered sequences, lists are more convenient than dicts with integer keys, because lists support iteration in index order, slicing, append, and other operations that would require awkward key management with a dict.






share|improve this answer



































    79


















    Use the built-in getattr function to get an attribute on an object by name. Modify the name as needed.



    obj.spam = 'eggs'
    name = 'spam'
    getattr(obj, name) # returns 'eggs'





    share|improve this answer



































      64


















      It's not a good idea. If you are accessing a global variable you can use globals().



      >>> a = 10
      >>> globals()['a']
      10


      If you want to access a variable in the local scope you can use locals(), but you cannot assign values to the returned dict.



      A better solution is to use getattr or store your variables in a dictionary and then access them by name.






      share|improve this answer



































        32


















        Whenever you want to use variable variables, it's probably better to use a dictionary. So instead of writing



        $foo = "bar"
        $$foo = "baz"


        you write



        mydict = 
        foo = "bar"
        mydict[foo] = "baz"


        This way you won't accidentally overwrite previously existing variables (which is the security aspect) and you can have different "namespaces".






        share|improve this answer

































          26


















          New coders sometimes write code like this:



          my_calculator.button_0 = tkinter.Button(root, text=0)
          my_calculator.button_1 = tkinter.Button(root, text=1)
          my_calculator.button_2 = tkinter.Button(root, text=2)
          ...


          The coder is then left with a pile of named variables, with a coding effort of O(m * n), where m is the number of named variables and n is the number of times that group of variables needs to be accessed (including creation). The more astute beginner observes that the only difference in each of those lines is a number that changes based on a rule, and decides to use a loop. However, they get stuck on how to dynamically create those variable names, and may try something like this:



          for i in range(10):
          my_calculator.('button_%d' % i) = tkinter.Button(root, text=i)


          They soon find that this does not work.



          If the program requires arbitrary variable "names," a dictionary is the best choice, as explained in other answers. However, if you're simply trying to create many variables and you don't mind referring to them with a sequence of integers, you're probably looking for a list. This is particularly true if your data are homogeneous, such as daily temperature readings, weekly quiz scores, or a grid of graphical widgets.



          This can be assembled as follows:



          my_calculator.buttons = []
          for i in range(10):
          my_calculator.buttons.append(tkinter.Button(root, text=i))


          This list can also be created in one line with a comprehension:



          my_calculator.buttons = [tkinter.Button(root, text=i) for i in range(10)]


          The result in either case is a populated list, with the first element accessed with my_calculator.buttons[0], the next with my_calculator.buttons[1], and so on. The "base" variable name becomes the name of the list and the varying identifier is used to access it.



          Finally, don't forget other data structures, such as the set - this is similar to a dictionary, except that each "name" doesn't have a value attached to it. If you simply need a "bag" of objects, this can be a great choice. Instead of something like this:



          keyword_1 = 'apple'
          keyword_2 = 'banana'

          if query == keyword_1 or query == keyword_2:
          print('Match.')


          You will have this:



          keywords = 'apple', 'banana'
          if query in keywords:
          print('Match.')


          Use a list for a sequence of similar objects, a set for an arbitrarily-ordered bag of objects, or a dict for a bag of names with associated values.






          share|improve this answer

































            10


















            Instead of a dictionary you can also use namedtuple from the collections module, which makes access easier.



            For example:



            # using dictionary
            variables =
            variables["first"] = 34
            variables["second"] = 45
            print(variables["first"], variables["second"])

            # using namedtuple
            Variables = namedtuple('Variables', ['first', 'second'])
            vars = Variables(34, 45)
            print(vars.first, vars.second)





            share|improve this answer



































              9


















              The SimpleNamespace class could be used to create new attributes with setattr, or subclass SimpleNamespace and create your own function to add new attribute names (variables).



              from types import SimpleNamespace

              variables = "b":"B","c":"C"
              a = SimpleNamespace(**variables)
              setattr(a,"g","G")
              a.g = "G+"
              something = a.a





              share|improve this answer



































                7


















                If you don't want to use any object, you can still use setattr() inside your current module:



                import sys
                current_module = module = sys.modules[__name__] # i.e the "file" where your code is written
                setattr(current_module, 'variable_name', 15) # 15 is the value you assign to the var
                print(variable_name) # >>> 15, created from a string





                share|improve this answer


























                • This one sounds better to me than using 'exec'.

                  – fralau
                  Dec 30 '17 at 21:13











                • This does not work with __dict__ variable however. I wonder if there is a general mechanism to create any global variable dynamically.

                  – Alexey
                  Jan 30 '18 at 18:25











                • globals() can do this

                  – Guillaume Lebreton
                  Jan 31 '18 at 7:42


















                5


















                You have to use globals() built in method to achieve that behaviour:



                def var_of_var(k, v):
                globals()[k] = v

                print variable_name # NameError: name 'variable_name' is not defined
                some_name = 'variable_name'
                globals()[some_name] = 123
                print variable_name # 123

                some_name = 'variable_name2'
                var_of_var(some_name, 456)
                print variable_name2 # 456





                share|improve this answer



































                  4


















                  Use globals()



                  You can actually assign variables to global scope dynamically, for instance, if you want 10 variables that can be accessed on a global scope i_1, i_2 ... i_10:



                  for i in range(10):
                  globals()['i_'.format(i)] = 'a'


                  This will assign 'a' to all of these 10 variables, of course you can change the value dynamically as well. All of these variables can be accessed now like other globally declared variable:



                  >>> i_5
                  'a'





                  share|improve this answer

































                    3


















                    I'm am answering the question: How to get the value of a variable given its name in a string?
                    which is closed as a duplicate with a link to this question.



                    If the variables in question are part of an object (part of a class for example) then some useful functions to achieve exactly that are hasattr, getattr, and setattr.



                    So for example you can have:



                    class Variables(object):
                    def __init__(self):
                    self.foo = "initial_variable"
                    def create_new_var(self,name,value):
                    setattr(self,name,value)
                    def get_var(self,name):
                    if hasattr(self,name):
                    return getattr(self,name)
                    else:
                    raise("Class does not have a variable named: "+name)


                    Then you can do:



                    v = Variables()
                    v.get_var("foo")



                    "initial_variable"




                    v.create_new_var(v.foo,"is actually not initial")
                    v.initial_variable



                    "is actually not initial"







                    share|improve this answer



































                      1


















                      The consensus is to use a dictionary for this - see the other answers. This is a good idea for most cases, however, there are many aspects arising from this:



                      • you'll yourself be responsible for this dictionary, including garbage collection (of in-dict variables) etc.

                      • there's either no locality or globality for variable variables, it depends on the globality of the dictionary

                      • if you want to rename a variable name, you'll have to do it manually

                      • however, you are much more flexible, e.g.

                        • you can decide to overwrite existing variables or ...

                        • ... choose to implement const variables

                        • to raise an exception on overwriting for different types

                        • etc.


                      That said, I've implemented a variable variables manager-class which provides some of the above ideas. It works for python 2 and 3.



                      You'd use the class like this:



                      from variableVariablesManager import VariableVariablesManager

                      myVars = VariableVariablesManager()
                      myVars['test'] = 25
                      print(myVars['test'])

                      # define a const variable
                      myVars.defineConstVariable('myconst', 13)
                      try:
                      myVars['myconst'] = 14 # <- this raises an error, since 'myconst' must not be changed
                      print("not allowed")
                      except AttributeError as e:
                      pass

                      # rename a variable
                      myVars.renameVariable('myconst', 'myconstOther')

                      # preserve locality
                      def testLocalVar():
                      myVars = VariableVariablesManager()
                      myVars['test'] = 13
                      print("inside function myVars['test']:", myVars['test'])
                      testLocalVar()
                      print("outside function myVars['test']:", myVars['test'])

                      # define a global variable
                      myVars.defineGlobalVariable('globalVar', 12)
                      def testGlobalVar():
                      myVars = VariableVariablesManager()
                      print("inside function myVars['globalVar']:", myVars['globalVar'])
                      myVars['globalVar'] = 13
                      print("inside function myVars['globalVar'] (having been changed):", myVars['globalVar'])
                      testGlobalVar()
                      print("outside function myVars['globalVar']:", myVars['globalVar'])


                      If you wish to allow overwriting of variables with the same type only:



                      myVars = VariableVariablesManager(enforceSameTypeOnOverride = True)
                      myVars['test'] = 25
                      myVars['test'] = "Cat" # <- raises Exception (different type on overwriting)





                      share|improve this answer




























                      • At first glance the long camelised imports made me think this was Java.

                        – markroxor
                        Feb 19 '18 at 6:17


















                      0


















                      Any set of variables can also be wrapped up in a class.
                      "Variable" variables may be added to the class instance during runtime by directly accessing the built-in dictionary through __dict__ attribute.



                      The following code defines Variables class, which adds variables (in this case attributes) to its instance during the construction. Variable names are taken from a specified list (which, for example, could have been generated by program code):



                      # some list of variable names
                      L = ['a', 'b', 'c']

                      class Variables:
                      def __init__(self, L):
                      for item in L:
                      self.__dict__[item] = 100

                      v = Variables(L)
                      print(v.a, v.b, v.c)
                      #will produce 100 100 100





                      share|improve this answer

























                        protected by Bhargav Rao Apr 21 '16 at 15:03



                        Thank you for your interest in this question.
                        Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



                        Would you like to answer one of these unanswered questions instead?













                        13 Answers
                        13






                        active

                        oldest

                        votes








                        13 Answers
                        13






                        active

                        oldest

                        votes









                        active

                        oldest

                        votes






                        active

                        oldest

                        votes









                        262


















                        You can use dictionaries to accomplish this. Dictionaries are stores of keys and values.



                        >>> dct = 'x': 1, 'y': 2, 'z': 3
                        >>> dct
                        'y': 2, 'x': 1, 'z': 3
                        >>> dct["y"]
                        2


                        You can use variable key names to achieve the effect of variable variables without the security risk.



                        >>> x = "spam"
                        >>> z = x: "eggs"
                        >>> z["spam"]
                        'eggs'


                        For cases where you're thinking of doing something like



                        var1 = 'foo'
                        var2 = 'bar'
                        var3 = 'baz'
                        ...


                        a list may be more appropriate than a dict. A list represents an ordered sequence of objects, with integer indices:



                        l = ['foo', 'bar', 'baz']
                        print(l[1]) # prints bar, because indices start at 0
                        l.append('potatoes') # l is now ['foo', 'bar', 'baz', 'potatoes']


                        For ordered sequences, lists are more convenient than dicts with integer keys, because lists support iteration in index order, slicing, append, and other operations that would require awkward key management with a dict.






                        share|improve this answer
































                          262


















                          You can use dictionaries to accomplish this. Dictionaries are stores of keys and values.



                          >>> dct = 'x': 1, 'y': 2, 'z': 3
                          >>> dct
                          'y': 2, 'x': 1, 'z': 3
                          >>> dct["y"]
                          2


                          You can use variable key names to achieve the effect of variable variables without the security risk.



                          >>> x = "spam"
                          >>> z = x: "eggs"
                          >>> z["spam"]
                          'eggs'


                          For cases where you're thinking of doing something like



                          var1 = 'foo'
                          var2 = 'bar'
                          var3 = 'baz'
                          ...


                          a list may be more appropriate than a dict. A list represents an ordered sequence of objects, with integer indices:



                          l = ['foo', 'bar', 'baz']
                          print(l[1]) # prints bar, because indices start at 0
                          l.append('potatoes') # l is now ['foo', 'bar', 'baz', 'potatoes']


                          For ordered sequences, lists are more convenient than dicts with integer keys, because lists support iteration in index order, slicing, append, and other operations that would require awkward key management with a dict.






                          share|improve this answer






























                            262














                            262










                            262









                            You can use dictionaries to accomplish this. Dictionaries are stores of keys and values.



                            >>> dct = 'x': 1, 'y': 2, 'z': 3
                            >>> dct
                            'y': 2, 'x': 1, 'z': 3
                            >>> dct["y"]
                            2


                            You can use variable key names to achieve the effect of variable variables without the security risk.



                            >>> x = "spam"
                            >>> z = x: "eggs"
                            >>> z["spam"]
                            'eggs'


                            For cases where you're thinking of doing something like



                            var1 = 'foo'
                            var2 = 'bar'
                            var3 = 'baz'
                            ...


                            a list may be more appropriate than a dict. A list represents an ordered sequence of objects, with integer indices:



                            l = ['foo', 'bar', 'baz']
                            print(l[1]) # prints bar, because indices start at 0
                            l.append('potatoes') # l is now ['foo', 'bar', 'baz', 'potatoes']


                            For ordered sequences, lists are more convenient than dicts with integer keys, because lists support iteration in index order, slicing, append, and other operations that would require awkward key management with a dict.






                            share|improve this answer
















                            You can use dictionaries to accomplish this. Dictionaries are stores of keys and values.



                            >>> dct = 'x': 1, 'y': 2, 'z': 3
                            >>> dct
                            'y': 2, 'x': 1, 'z': 3
                            >>> dct["y"]
                            2


                            You can use variable key names to achieve the effect of variable variables without the security risk.



                            >>> x = "spam"
                            >>> z = x: "eggs"
                            >>> z["spam"]
                            'eggs'


                            For cases where you're thinking of doing something like



                            var1 = 'foo'
                            var2 = 'bar'
                            var3 = 'baz'
                            ...


                            a list may be more appropriate than a dict. A list represents an ordered sequence of objects, with integer indices:



                            l = ['foo', 'bar', 'baz']
                            print(l[1]) # prints bar, because indices start at 0
                            l.append('potatoes') # l is now ['foo', 'bar', 'baz', 'potatoes']


                            For ordered sequences, lists are more convenient than dicts with integer keys, because lists support iteration in index order, slicing, append, and other operations that would require awkward key management with a dict.







                            share|improve this answer















                            share|improve this answer




                            share|improve this answer








                            edited May 13 at 14:32









                            Georgy

                            3,0904 gold badges23 silver badges34 bronze badges




                            3,0904 gold badges23 silver badges34 bronze badges










                            answered Sep 3 '09 at 12:41







                            c_harmc_harm

































                                79


















                                Use the built-in getattr function to get an attribute on an object by name. Modify the name as needed.



                                obj.spam = 'eggs'
                                name = 'spam'
                                getattr(obj, name) # returns 'eggs'





                                share|improve this answer
































                                  79


















                                  Use the built-in getattr function to get an attribute on an object by name. Modify the name as needed.



                                  obj.spam = 'eggs'
                                  name = 'spam'
                                  getattr(obj, name) # returns 'eggs'





                                  share|improve this answer






























                                    79














                                    79










                                    79









                                    Use the built-in getattr function to get an attribute on an object by name. Modify the name as needed.



                                    obj.spam = 'eggs'
                                    name = 'spam'
                                    getattr(obj, name) # returns 'eggs'





                                    share|improve this answer
















                                    Use the built-in getattr function to get an attribute on an object by name. Modify the name as needed.



                                    obj.spam = 'eggs'
                                    name = 'spam'
                                    getattr(obj, name) # returns 'eggs'






                                    share|improve this answer















                                    share|improve this answer




                                    share|improve this answer








                                    edited Apr 21 '16 at 15:23









                                    davidism

                                    74.5k14 gold badges218 silver badges224 bronze badges




                                    74.5k14 gold badges218 silver badges224 bronze badges










                                    answered Sep 3 '09 at 12:43









                                    SilentGhostSilentGhost

                                    215k49 gold badges277 silver badges271 bronze badges




                                    215k49 gold badges277 silver badges271 bronze badges
























                                        64


















                                        It's not a good idea. If you are accessing a global variable you can use globals().



                                        >>> a = 10
                                        >>> globals()['a']
                                        10


                                        If you want to access a variable in the local scope you can use locals(), but you cannot assign values to the returned dict.



                                        A better solution is to use getattr or store your variables in a dictionary and then access them by name.






                                        share|improve this answer
































                                          64


















                                          It's not a good idea. If you are accessing a global variable you can use globals().



                                          >>> a = 10
                                          >>> globals()['a']
                                          10


                                          If you want to access a variable in the local scope you can use locals(), but you cannot assign values to the returned dict.



                                          A better solution is to use getattr or store your variables in a dictionary and then access them by name.






                                          share|improve this answer






























                                            64














                                            64










                                            64









                                            It's not a good idea. If you are accessing a global variable you can use globals().



                                            >>> a = 10
                                            >>> globals()['a']
                                            10


                                            If you want to access a variable in the local scope you can use locals(), but you cannot assign values to the returned dict.



                                            A better solution is to use getattr or store your variables in a dictionary and then access them by name.






                                            share|improve this answer
















                                            It's not a good idea. If you are accessing a global variable you can use globals().



                                            >>> a = 10
                                            >>> globals()['a']
                                            10


                                            If you want to access a variable in the local scope you can use locals(), but you cannot assign values to the returned dict.



                                            A better solution is to use getattr or store your variables in a dictionary and then access them by name.







                                            share|improve this answer















                                            share|improve this answer




                                            share|improve this answer








                                            edited Apr 24 '17 at 2:03









                                            Vallentin

                                            12.3k4 gold badges36 silver badges55 bronze badges




                                            12.3k4 gold badges36 silver badges55 bronze badges










                                            answered Sep 3 '09 at 12:43









                                            Nadia AlramliNadia Alramli

                                            85.4k28 gold badges158 silver badges148 bronze badges




                                            85.4k28 gold badges158 silver badges148 bronze badges
























                                                32


















                                                Whenever you want to use variable variables, it's probably better to use a dictionary. So instead of writing



                                                $foo = "bar"
                                                $$foo = "baz"


                                                you write



                                                mydict = 
                                                foo = "bar"
                                                mydict[foo] = "baz"


                                                This way you won't accidentally overwrite previously existing variables (which is the security aspect) and you can have different "namespaces".






                                                share|improve this answer






























                                                  32


















                                                  Whenever you want to use variable variables, it's probably better to use a dictionary. So instead of writing



                                                  $foo = "bar"
                                                  $$foo = "baz"


                                                  you write



                                                  mydict = 
                                                  foo = "bar"
                                                  mydict[foo] = "baz"


                                                  This way you won't accidentally overwrite previously existing variables (which is the security aspect) and you can have different "namespaces".






                                                  share|improve this answer




























                                                    32














                                                    32










                                                    32









                                                    Whenever you want to use variable variables, it's probably better to use a dictionary. So instead of writing



                                                    $foo = "bar"
                                                    $$foo = "baz"


                                                    you write



                                                    mydict = 
                                                    foo = "bar"
                                                    mydict[foo] = "baz"


                                                    This way you won't accidentally overwrite previously existing variables (which is the security aspect) and you can have different "namespaces".






                                                    share|improve this answer














                                                    Whenever you want to use variable variables, it's probably better to use a dictionary. So instead of writing



                                                    $foo = "bar"
                                                    $$foo = "baz"


                                                    you write



                                                    mydict = 
                                                    foo = "bar"
                                                    mydict[foo] = "baz"


                                                    This way you won't accidentally overwrite previously existing variables (which is the security aspect) and you can have different "namespaces".







                                                    share|improve this answer













                                                    share|improve this answer




                                                    share|improve this answer










                                                    answered Sep 3 '09 at 12:42









                                                    sepp2ksepp2k

                                                    314k42 gold badges613 silver badges633 bronze badges




                                                    314k42 gold badges613 silver badges633 bronze badges
























                                                        26


















                                                        New coders sometimes write code like this:



                                                        my_calculator.button_0 = tkinter.Button(root, text=0)
                                                        my_calculator.button_1 = tkinter.Button(root, text=1)
                                                        my_calculator.button_2 = tkinter.Button(root, text=2)
                                                        ...


                                                        The coder is then left with a pile of named variables, with a coding effort of O(m * n), where m is the number of named variables and n is the number of times that group of variables needs to be accessed (including creation). The more astute beginner observes that the only difference in each of those lines is a number that changes based on a rule, and decides to use a loop. However, they get stuck on how to dynamically create those variable names, and may try something like this:



                                                        for i in range(10):
                                                        my_calculator.('button_%d' % i) = tkinter.Button(root, text=i)


                                                        They soon find that this does not work.



                                                        If the program requires arbitrary variable "names," a dictionary is the best choice, as explained in other answers. However, if you're simply trying to create many variables and you don't mind referring to them with a sequence of integers, you're probably looking for a list. This is particularly true if your data are homogeneous, such as daily temperature readings, weekly quiz scores, or a grid of graphical widgets.



                                                        This can be assembled as follows:



                                                        my_calculator.buttons = []
                                                        for i in range(10):
                                                        my_calculator.buttons.append(tkinter.Button(root, text=i))


                                                        This list can also be created in one line with a comprehension:



                                                        my_calculator.buttons = [tkinter.Button(root, text=i) for i in range(10)]


                                                        The result in either case is a populated list, with the first element accessed with my_calculator.buttons[0], the next with my_calculator.buttons[1], and so on. The "base" variable name becomes the name of the list and the varying identifier is used to access it.



                                                        Finally, don't forget other data structures, such as the set - this is similar to a dictionary, except that each "name" doesn't have a value attached to it. If you simply need a "bag" of objects, this can be a great choice. Instead of something like this:



                                                        keyword_1 = 'apple'
                                                        keyword_2 = 'banana'

                                                        if query == keyword_1 or query == keyword_2:
                                                        print('Match.')


                                                        You will have this:



                                                        keywords = 'apple', 'banana'
                                                        if query in keywords:
                                                        print('Match.')


                                                        Use a list for a sequence of similar objects, a set for an arbitrarily-ordered bag of objects, or a dict for a bag of names with associated values.






                                                        share|improve this answer






























                                                          26


















                                                          New coders sometimes write code like this:



                                                          my_calculator.button_0 = tkinter.Button(root, text=0)
                                                          my_calculator.button_1 = tkinter.Button(root, text=1)
                                                          my_calculator.button_2 = tkinter.Button(root, text=2)
                                                          ...


                                                          The coder is then left with a pile of named variables, with a coding effort of O(m * n), where m is the number of named variables and n is the number of times that group of variables needs to be accessed (including creation). The more astute beginner observes that the only difference in each of those lines is a number that changes based on a rule, and decides to use a loop. However, they get stuck on how to dynamically create those variable names, and may try something like this:



                                                          for i in range(10):
                                                          my_calculator.('button_%d' % i) = tkinter.Button(root, text=i)


                                                          They soon find that this does not work.



                                                          If the program requires arbitrary variable "names," a dictionary is the best choice, as explained in other answers. However, if you're simply trying to create many variables and you don't mind referring to them with a sequence of integers, you're probably looking for a list. This is particularly true if your data are homogeneous, such as daily temperature readings, weekly quiz scores, or a grid of graphical widgets.



                                                          This can be assembled as follows:



                                                          my_calculator.buttons = []
                                                          for i in range(10):
                                                          my_calculator.buttons.append(tkinter.Button(root, text=i))


                                                          This list can also be created in one line with a comprehension:



                                                          my_calculator.buttons = [tkinter.Button(root, text=i) for i in range(10)]


                                                          The result in either case is a populated list, with the first element accessed with my_calculator.buttons[0], the next with my_calculator.buttons[1], and so on. The "base" variable name becomes the name of the list and the varying identifier is used to access it.



                                                          Finally, don't forget other data structures, such as the set - this is similar to a dictionary, except that each "name" doesn't have a value attached to it. If you simply need a "bag" of objects, this can be a great choice. Instead of something like this:



                                                          keyword_1 = 'apple'
                                                          keyword_2 = 'banana'

                                                          if query == keyword_1 or query == keyword_2:
                                                          print('Match.')


                                                          You will have this:



                                                          keywords = 'apple', 'banana'
                                                          if query in keywords:
                                                          print('Match.')


                                                          Use a list for a sequence of similar objects, a set for an arbitrarily-ordered bag of objects, or a dict for a bag of names with associated values.






                                                          share|improve this answer




























                                                            26














                                                            26










                                                            26









                                                            New coders sometimes write code like this:



                                                            my_calculator.button_0 = tkinter.Button(root, text=0)
                                                            my_calculator.button_1 = tkinter.Button(root, text=1)
                                                            my_calculator.button_2 = tkinter.Button(root, text=2)
                                                            ...


                                                            The coder is then left with a pile of named variables, with a coding effort of O(m * n), where m is the number of named variables and n is the number of times that group of variables needs to be accessed (including creation). The more astute beginner observes that the only difference in each of those lines is a number that changes based on a rule, and decides to use a loop. However, they get stuck on how to dynamically create those variable names, and may try something like this:



                                                            for i in range(10):
                                                            my_calculator.('button_%d' % i) = tkinter.Button(root, text=i)


                                                            They soon find that this does not work.



                                                            If the program requires arbitrary variable "names," a dictionary is the best choice, as explained in other answers. However, if you're simply trying to create many variables and you don't mind referring to them with a sequence of integers, you're probably looking for a list. This is particularly true if your data are homogeneous, such as daily temperature readings, weekly quiz scores, or a grid of graphical widgets.



                                                            This can be assembled as follows:



                                                            my_calculator.buttons = []
                                                            for i in range(10):
                                                            my_calculator.buttons.append(tkinter.Button(root, text=i))


                                                            This list can also be created in one line with a comprehension:



                                                            my_calculator.buttons = [tkinter.Button(root, text=i) for i in range(10)]


                                                            The result in either case is a populated list, with the first element accessed with my_calculator.buttons[0], the next with my_calculator.buttons[1], and so on. The "base" variable name becomes the name of the list and the varying identifier is used to access it.



                                                            Finally, don't forget other data structures, such as the set - this is similar to a dictionary, except that each "name" doesn't have a value attached to it. If you simply need a "bag" of objects, this can be a great choice. Instead of something like this:



                                                            keyword_1 = 'apple'
                                                            keyword_2 = 'banana'

                                                            if query == keyword_1 or query == keyword_2:
                                                            print('Match.')


                                                            You will have this:



                                                            keywords = 'apple', 'banana'
                                                            if query in keywords:
                                                            print('Match.')


                                                            Use a list for a sequence of similar objects, a set for an arbitrarily-ordered bag of objects, or a dict for a bag of names with associated values.






                                                            share|improve this answer














                                                            New coders sometimes write code like this:



                                                            my_calculator.button_0 = tkinter.Button(root, text=0)
                                                            my_calculator.button_1 = tkinter.Button(root, text=1)
                                                            my_calculator.button_2 = tkinter.Button(root, text=2)
                                                            ...


                                                            The coder is then left with a pile of named variables, with a coding effort of O(m * n), where m is the number of named variables and n is the number of times that group of variables needs to be accessed (including creation). The more astute beginner observes that the only difference in each of those lines is a number that changes based on a rule, and decides to use a loop. However, they get stuck on how to dynamically create those variable names, and may try something like this:



                                                            for i in range(10):
                                                            my_calculator.('button_%d' % i) = tkinter.Button(root, text=i)


                                                            They soon find that this does not work.



                                                            If the program requires arbitrary variable "names," a dictionary is the best choice, as explained in other answers. However, if you're simply trying to create many variables and you don't mind referring to them with a sequence of integers, you're probably looking for a list. This is particularly true if your data are homogeneous, such as daily temperature readings, weekly quiz scores, or a grid of graphical widgets.



                                                            This can be assembled as follows:



                                                            my_calculator.buttons = []
                                                            for i in range(10):
                                                            my_calculator.buttons.append(tkinter.Button(root, text=i))


                                                            This list can also be created in one line with a comprehension:



                                                            my_calculator.buttons = [tkinter.Button(root, text=i) for i in range(10)]


                                                            The result in either case is a populated list, with the first element accessed with my_calculator.buttons[0], the next with my_calculator.buttons[1], and so on. The "base" variable name becomes the name of the list and the varying identifier is used to access it.



                                                            Finally, don't forget other data structures, such as the set - this is similar to a dictionary, except that each "name" doesn't have a value attached to it. If you simply need a "bag" of objects, this can be a great choice. Instead of something like this:



                                                            keyword_1 = 'apple'
                                                            keyword_2 = 'banana'

                                                            if query == keyword_1 or query == keyword_2:
                                                            print('Match.')


                                                            You will have this:



                                                            keywords = 'apple', 'banana'
                                                            if query in keywords:
                                                            print('Match.')


                                                            Use a list for a sequence of similar objects, a set for an arbitrarily-ordered bag of objects, or a dict for a bag of names with associated values.







                                                            share|improve this answer













                                                            share|improve this answer




                                                            share|improve this answer










                                                            answered Aug 16 '16 at 10:41









                                                            TigerhawkT3TigerhawkT3

                                                            41k5 gold badges38 silver badges68 bronze badges




                                                            41k5 gold badges38 silver badges68 bronze badges
























                                                                10


















                                                                Instead of a dictionary you can also use namedtuple from the collections module, which makes access easier.



                                                                For example:



                                                                # using dictionary
                                                                variables =
                                                                variables["first"] = 34
                                                                variables["second"] = 45
                                                                print(variables["first"], variables["second"])

                                                                # using namedtuple
                                                                Variables = namedtuple('Variables', ['first', 'second'])
                                                                vars = Variables(34, 45)
                                                                print(vars.first, vars.second)





                                                                share|improve this answer
































                                                                  10


















                                                                  Instead of a dictionary you can also use namedtuple from the collections module, which makes access easier.



                                                                  For example:



                                                                  # using dictionary
                                                                  variables =
                                                                  variables["first"] = 34
                                                                  variables["second"] = 45
                                                                  print(variables["first"], variables["second"])

                                                                  # using namedtuple
                                                                  Variables = namedtuple('Variables', ['first', 'second'])
                                                                  vars = Variables(34, 45)
                                                                  print(vars.first, vars.second)





                                                                  share|improve this answer






























                                                                    10














                                                                    10










                                                                    10









                                                                    Instead of a dictionary you can also use namedtuple from the collections module, which makes access easier.



                                                                    For example:



                                                                    # using dictionary
                                                                    variables =
                                                                    variables["first"] = 34
                                                                    variables["second"] = 45
                                                                    print(variables["first"], variables["second"])

                                                                    # using namedtuple
                                                                    Variables = namedtuple('Variables', ['first', 'second'])
                                                                    vars = Variables(34, 45)
                                                                    print(vars.first, vars.second)





                                                                    share|improve this answer
















                                                                    Instead of a dictionary you can also use namedtuple from the collections module, which makes access easier.



                                                                    For example:



                                                                    # using dictionary
                                                                    variables =
                                                                    variables["first"] = 34
                                                                    variables["second"] = 45
                                                                    print(variables["first"], variables["second"])

                                                                    # using namedtuple
                                                                    Variables = namedtuple('Variables', ['first', 'second'])
                                                                    vars = Variables(34, 45)
                                                                    print(vars.first, vars.second)






                                                                    share|improve this answer















                                                                    share|improve this answer




                                                                    share|improve this answer








                                                                    edited May 13 at 14:39









                                                                    Georgy

                                                                    3,0904 gold badges23 silver badges34 bronze badges




                                                                    3,0904 gold badges23 silver badges34 bronze badges










                                                                    answered Jun 22 '16 at 15:09









                                                                    ojas mohrilojas mohril

                                                                    1,3009 silver badges11 bronze badges




                                                                    1,3009 silver badges11 bronze badges
























                                                                        9


















                                                                        The SimpleNamespace class could be used to create new attributes with setattr, or subclass SimpleNamespace and create your own function to add new attribute names (variables).



                                                                        from types import SimpleNamespace

                                                                        variables = "b":"B","c":"C"
                                                                        a = SimpleNamespace(**variables)
                                                                        setattr(a,"g","G")
                                                                        a.g = "G+"
                                                                        something = a.a





                                                                        share|improve this answer
































                                                                          9


















                                                                          The SimpleNamespace class could be used to create new attributes with setattr, or subclass SimpleNamespace and create your own function to add new attribute names (variables).



                                                                          from types import SimpleNamespace

                                                                          variables = "b":"B","c":"C"
                                                                          a = SimpleNamespace(**variables)
                                                                          setattr(a,"g","G")
                                                                          a.g = "G+"
                                                                          something = a.a





                                                                          share|improve this answer






























                                                                            9














                                                                            9










                                                                            9









                                                                            The SimpleNamespace class could be used to create new attributes with setattr, or subclass SimpleNamespace and create your own function to add new attribute names (variables).



                                                                            from types import SimpleNamespace

                                                                            variables = "b":"B","c":"C"
                                                                            a = SimpleNamespace(**variables)
                                                                            setattr(a,"g","G")
                                                                            a.g = "G+"
                                                                            something = a.a





                                                                            share|improve this answer
















                                                                            The SimpleNamespace class could be used to create new attributes with setattr, or subclass SimpleNamespace and create your own function to add new attribute names (variables).



                                                                            from types import SimpleNamespace

                                                                            variables = "b":"B","c":"C"
                                                                            a = SimpleNamespace(**variables)
                                                                            setattr(a,"g","G")
                                                                            a.g = "G+"
                                                                            something = a.a






                                                                            share|improve this answer















                                                                            share|improve this answer




                                                                            share|improve this answer








                                                                            edited May 24 at 13:22









                                                                            Demi-Lune

                                                                            7961 gold badge6 silver badges18 bronze badges




                                                                            7961 gold badge6 silver badges18 bronze badges










                                                                            answered Sep 17 '17 at 22:38









                                                                            Bill OldroydBill Oldroyd

                                                                            1791 silver badge4 bronze badges




                                                                            1791 silver badge4 bronze badges
























                                                                                7


















                                                                                If you don't want to use any object, you can still use setattr() inside your current module:



                                                                                import sys
                                                                                current_module = module = sys.modules[__name__] # i.e the "file" where your code is written
                                                                                setattr(current_module, 'variable_name', 15) # 15 is the value you assign to the var
                                                                                print(variable_name) # >>> 15, created from a string





                                                                                share|improve this answer


























                                                                                • This one sounds better to me than using 'exec'.

                                                                                  – fralau
                                                                                  Dec 30 '17 at 21:13











                                                                                • This does not work with __dict__ variable however. I wonder if there is a general mechanism to create any global variable dynamically.

                                                                                  – Alexey
                                                                                  Jan 30 '18 at 18:25











                                                                                • globals() can do this

                                                                                  – Guillaume Lebreton
                                                                                  Jan 31 '18 at 7:42















                                                                                7


















                                                                                If you don't want to use any object, you can still use setattr() inside your current module:



                                                                                import sys
                                                                                current_module = module = sys.modules[__name__] # i.e the "file" where your code is written
                                                                                setattr(current_module, 'variable_name', 15) # 15 is the value you assign to the var
                                                                                print(variable_name) # >>> 15, created from a string





                                                                                share|improve this answer


























                                                                                • This one sounds better to me than using 'exec'.

                                                                                  – fralau
                                                                                  Dec 30 '17 at 21:13











                                                                                • This does not work with __dict__ variable however. I wonder if there is a general mechanism to create any global variable dynamically.

                                                                                  – Alexey
                                                                                  Jan 30 '18 at 18:25











                                                                                • globals() can do this

                                                                                  – Guillaume Lebreton
                                                                                  Jan 31 '18 at 7:42













                                                                                7














                                                                                7










                                                                                7









                                                                                If you don't want to use any object, you can still use setattr() inside your current module:



                                                                                import sys
                                                                                current_module = module = sys.modules[__name__] # i.e the "file" where your code is written
                                                                                setattr(current_module, 'variable_name', 15) # 15 is the value you assign to the var
                                                                                print(variable_name) # >>> 15, created from a string





                                                                                share|improve this answer














                                                                                If you don't want to use any object, you can still use setattr() inside your current module:



                                                                                import sys
                                                                                current_module = module = sys.modules[__name__] # i.e the "file" where your code is written
                                                                                setattr(current_module, 'variable_name', 15) # 15 is the value you assign to the var
                                                                                print(variable_name) # >>> 15, created from a string






                                                                                share|improve this answer













                                                                                share|improve this answer




                                                                                share|improve this answer










                                                                                answered Oct 23 '17 at 19:24









                                                                                Guillaume LebretonGuillaume Lebreton

                                                                                8667 silver badges16 bronze badges




                                                                                8667 silver badges16 bronze badges















                                                                                • This one sounds better to me than using 'exec'.

                                                                                  – fralau
                                                                                  Dec 30 '17 at 21:13











                                                                                • This does not work with __dict__ variable however. I wonder if there is a general mechanism to create any global variable dynamically.

                                                                                  – Alexey
                                                                                  Jan 30 '18 at 18:25











                                                                                • globals() can do this

                                                                                  – Guillaume Lebreton
                                                                                  Jan 31 '18 at 7:42

















                                                                                • This one sounds better to me than using 'exec'.

                                                                                  – fralau
                                                                                  Dec 30 '17 at 21:13











                                                                                • This does not work with __dict__ variable however. I wonder if there is a general mechanism to create any global variable dynamically.

                                                                                  – Alexey
                                                                                  Jan 30 '18 at 18:25











                                                                                • globals() can do this

                                                                                  – Guillaume Lebreton
                                                                                  Jan 31 '18 at 7:42
















                                                                                This one sounds better to me than using 'exec'.

                                                                                – fralau
                                                                                Dec 30 '17 at 21:13





                                                                                This one sounds better to me than using 'exec'.

                                                                                – fralau
                                                                                Dec 30 '17 at 21:13













                                                                                This does not work with __dict__ variable however. I wonder if there is a general mechanism to create any global variable dynamically.

                                                                                – Alexey
                                                                                Jan 30 '18 at 18:25





                                                                                This does not work with __dict__ variable however. I wonder if there is a general mechanism to create any global variable dynamically.

                                                                                – Alexey
                                                                                Jan 30 '18 at 18:25













                                                                                globals() can do this

                                                                                – Guillaume Lebreton
                                                                                Jan 31 '18 at 7:42





                                                                                globals() can do this

                                                                                – Guillaume Lebreton
                                                                                Jan 31 '18 at 7:42











                                                                                5


















                                                                                You have to use globals() built in method to achieve that behaviour:



                                                                                def var_of_var(k, v):
                                                                                globals()[k] = v

                                                                                print variable_name # NameError: name 'variable_name' is not defined
                                                                                some_name = 'variable_name'
                                                                                globals()[some_name] = 123
                                                                                print variable_name # 123

                                                                                some_name = 'variable_name2'
                                                                                var_of_var(some_name, 456)
                                                                                print variable_name2 # 456





                                                                                share|improve this answer
































                                                                                  5


















                                                                                  You have to use globals() built in method to achieve that behaviour:



                                                                                  def var_of_var(k, v):
                                                                                  globals()[k] = v

                                                                                  print variable_name # NameError: name 'variable_name' is not defined
                                                                                  some_name = 'variable_name'
                                                                                  globals()[some_name] = 123
                                                                                  print variable_name # 123

                                                                                  some_name = 'variable_name2'
                                                                                  var_of_var(some_name, 456)
                                                                                  print variable_name2 # 456





                                                                                  share|improve this answer






























                                                                                    5














                                                                                    5










                                                                                    5









                                                                                    You have to use globals() built in method to achieve that behaviour:



                                                                                    def var_of_var(k, v):
                                                                                    globals()[k] = v

                                                                                    print variable_name # NameError: name 'variable_name' is not defined
                                                                                    some_name = 'variable_name'
                                                                                    globals()[some_name] = 123
                                                                                    print variable_name # 123

                                                                                    some_name = 'variable_name2'
                                                                                    var_of_var(some_name, 456)
                                                                                    print variable_name2 # 456





                                                                                    share|improve this answer
















                                                                                    You have to use globals() built in method to achieve that behaviour:



                                                                                    def var_of_var(k, v):
                                                                                    globals()[k] = v

                                                                                    print variable_name # NameError: name 'variable_name' is not defined
                                                                                    some_name = 'variable_name'
                                                                                    globals()[some_name] = 123
                                                                                    print variable_name # 123

                                                                                    some_name = 'variable_name2'
                                                                                    var_of_var(some_name, 456)
                                                                                    print variable_name2 # 456






                                                                                    share|improve this answer















                                                                                    share|improve this answer




                                                                                    share|improve this answer








                                                                                    edited Apr 24 '17 at 2:04









                                                                                    Vallentin

                                                                                    12.3k4 gold badges36 silver badges55 bronze badges




                                                                                    12.3k4 gold badges36 silver badges55 bronze badges










                                                                                    answered Jun 9 '16 at 12:14









                                                                                    Andriy IvaneykoAndriy Ivaneyko

                                                                                    11.7k3 gold badges26 silver badges45 bronze badges




                                                                                    11.7k3 gold badges26 silver badges45 bronze badges
























                                                                                        4


















                                                                                        Use globals()



                                                                                        You can actually assign variables to global scope dynamically, for instance, if you want 10 variables that can be accessed on a global scope i_1, i_2 ... i_10:



                                                                                        for i in range(10):
                                                                                        globals()['i_'.format(i)] = 'a'


                                                                                        This will assign 'a' to all of these 10 variables, of course you can change the value dynamically as well. All of these variables can be accessed now like other globally declared variable:



                                                                                        >>> i_5
                                                                                        'a'





                                                                                        share|improve this answer






























                                                                                          4


















                                                                                          Use globals()



                                                                                          You can actually assign variables to global scope dynamically, for instance, if you want 10 variables that can be accessed on a global scope i_1, i_2 ... i_10:



                                                                                          for i in range(10):
                                                                                          globals()['i_'.format(i)] = 'a'


                                                                                          This will assign 'a' to all of these 10 variables, of course you can change the value dynamically as well. All of these variables can be accessed now like other globally declared variable:



                                                                                          >>> i_5
                                                                                          'a'





                                                                                          share|improve this answer




























                                                                                            4














                                                                                            4










                                                                                            4









                                                                                            Use globals()



                                                                                            You can actually assign variables to global scope dynamically, for instance, if you want 10 variables that can be accessed on a global scope i_1, i_2 ... i_10:



                                                                                            for i in range(10):
                                                                                            globals()['i_'.format(i)] = 'a'


                                                                                            This will assign 'a' to all of these 10 variables, of course you can change the value dynamically as well. All of these variables can be accessed now like other globally declared variable:



                                                                                            >>> i_5
                                                                                            'a'





                                                                                            share|improve this answer














                                                                                            Use globals()



                                                                                            You can actually assign variables to global scope dynamically, for instance, if you want 10 variables that can be accessed on a global scope i_1, i_2 ... i_10:



                                                                                            for i in range(10):
                                                                                            globals()['i_'.format(i)] = 'a'


                                                                                            This will assign 'a' to all of these 10 variables, of course you can change the value dynamically as well. All of these variables can be accessed now like other globally declared variable:



                                                                                            >>> i_5
                                                                                            'a'






                                                                                            share|improve this answer













                                                                                            share|improve this answer




                                                                                            share|improve this answer










                                                                                            answered Nov 27 '18 at 15:34









                                                                                            Rocky LiRocky Li

                                                                                            3,9591 gold badge8 silver badges19 bronze badges




                                                                                            3,9591 gold badge8 silver badges19 bronze badges
























                                                                                                3


















                                                                                                I'm am answering the question: How to get the value of a variable given its name in a string?
                                                                                                which is closed as a duplicate with a link to this question.



                                                                                                If the variables in question are part of an object (part of a class for example) then some useful functions to achieve exactly that are hasattr, getattr, and setattr.



                                                                                                So for example you can have:



                                                                                                class Variables(object):
                                                                                                def __init__(self):
                                                                                                self.foo = "initial_variable"
                                                                                                def create_new_var(self,name,value):
                                                                                                setattr(self,name,value)
                                                                                                def get_var(self,name):
                                                                                                if hasattr(self,name):
                                                                                                return getattr(self,name)
                                                                                                else:
                                                                                                raise("Class does not have a variable named: "+name)


                                                                                                Then you can do:



                                                                                                v = Variables()
                                                                                                v.get_var("foo")



                                                                                                "initial_variable"




                                                                                                v.create_new_var(v.foo,"is actually not initial")
                                                                                                v.initial_variable



                                                                                                "is actually not initial"







                                                                                                share|improve this answer
































                                                                                                  3


















                                                                                                  I'm am answering the question: How to get the value of a variable given its name in a string?
                                                                                                  which is closed as a duplicate with a link to this question.



                                                                                                  If the variables in question are part of an object (part of a class for example) then some useful functions to achieve exactly that are hasattr, getattr, and setattr.



                                                                                                  So for example you can have:



                                                                                                  class Variables(object):
                                                                                                  def __init__(self):
                                                                                                  self.foo = "initial_variable"
                                                                                                  def create_new_var(self,name,value):
                                                                                                  setattr(self,name,value)
                                                                                                  def get_var(self,name):
                                                                                                  if hasattr(self,name):
                                                                                                  return getattr(self,name)
                                                                                                  else:
                                                                                                  raise("Class does not have a variable named: "+name)


                                                                                                  Then you can do:



                                                                                                  v = Variables()
                                                                                                  v.get_var("foo")



                                                                                                  "initial_variable"




                                                                                                  v.create_new_var(v.foo,"is actually not initial")
                                                                                                  v.initial_variable



                                                                                                  "is actually not initial"







                                                                                                  share|improve this answer






























                                                                                                    3














                                                                                                    3










                                                                                                    3









                                                                                                    I'm am answering the question: How to get the value of a variable given its name in a string?
                                                                                                    which is closed as a duplicate with a link to this question.



                                                                                                    If the variables in question are part of an object (part of a class for example) then some useful functions to achieve exactly that are hasattr, getattr, and setattr.



                                                                                                    So for example you can have:



                                                                                                    class Variables(object):
                                                                                                    def __init__(self):
                                                                                                    self.foo = "initial_variable"
                                                                                                    def create_new_var(self,name,value):
                                                                                                    setattr(self,name,value)
                                                                                                    def get_var(self,name):
                                                                                                    if hasattr(self,name):
                                                                                                    return getattr(self,name)
                                                                                                    else:
                                                                                                    raise("Class does not have a variable named: "+name)


                                                                                                    Then you can do:



                                                                                                    v = Variables()
                                                                                                    v.get_var("foo")



                                                                                                    "initial_variable"




                                                                                                    v.create_new_var(v.foo,"is actually not initial")
                                                                                                    v.initial_variable



                                                                                                    "is actually not initial"







                                                                                                    share|improve this answer
















                                                                                                    I'm am answering the question: How to get the value of a variable given its name in a string?
                                                                                                    which is closed as a duplicate with a link to this question.



                                                                                                    If the variables in question are part of an object (part of a class for example) then some useful functions to achieve exactly that are hasattr, getattr, and setattr.



                                                                                                    So for example you can have:



                                                                                                    class Variables(object):
                                                                                                    def __init__(self):
                                                                                                    self.foo = "initial_variable"
                                                                                                    def create_new_var(self,name,value):
                                                                                                    setattr(self,name,value)
                                                                                                    def get_var(self,name):
                                                                                                    if hasattr(self,name):
                                                                                                    return getattr(self,name)
                                                                                                    else:
                                                                                                    raise("Class does not have a variable named: "+name)


                                                                                                    Then you can do:



                                                                                                    v = Variables()
                                                                                                    v.get_var("foo")



                                                                                                    "initial_variable"




                                                                                                    v.create_new_var(v.foo,"is actually not initial")
                                                                                                    v.initial_variable



                                                                                                    "is actually not initial"








                                                                                                    share|improve this answer















                                                                                                    share|improve this answer




                                                                                                    share|improve this answer








                                                                                                    edited May 23 '17 at 12:10









                                                                                                    Community

                                                                                                    11 silver badge




                                                                                                    11 silver badge










                                                                                                    answered Nov 2 '16 at 15:53









                                                                                                    patapouf_aipatapouf_ai

                                                                                                    8,4128 gold badges56 silver badges97 bronze badges




                                                                                                    8,4128 gold badges56 silver badges97 bronze badges
























                                                                                                        1


















                                                                                                        The consensus is to use a dictionary for this - see the other answers. This is a good idea for most cases, however, there are many aspects arising from this:



                                                                                                        • you'll yourself be responsible for this dictionary, including garbage collection (of in-dict variables) etc.

                                                                                                        • there's either no locality or globality for variable variables, it depends on the globality of the dictionary

                                                                                                        • if you want to rename a variable name, you'll have to do it manually

                                                                                                        • however, you are much more flexible, e.g.

                                                                                                          • you can decide to overwrite existing variables or ...

                                                                                                          • ... choose to implement const variables

                                                                                                          • to raise an exception on overwriting for different types

                                                                                                          • etc.


                                                                                                        That said, I've implemented a variable variables manager-class which provides some of the above ideas. It works for python 2 and 3.



                                                                                                        You'd use the class like this:



                                                                                                        from variableVariablesManager import VariableVariablesManager

                                                                                                        myVars = VariableVariablesManager()
                                                                                                        myVars['test'] = 25
                                                                                                        print(myVars['test'])

                                                                                                        # define a const variable
                                                                                                        myVars.defineConstVariable('myconst', 13)
                                                                                                        try:
                                                                                                        myVars['myconst'] = 14 # <- this raises an error, since 'myconst' must not be changed
                                                                                                        print("not allowed")
                                                                                                        except AttributeError as e:
                                                                                                        pass

                                                                                                        # rename a variable
                                                                                                        myVars.renameVariable('myconst', 'myconstOther')

                                                                                                        # preserve locality
                                                                                                        def testLocalVar():
                                                                                                        myVars = VariableVariablesManager()
                                                                                                        myVars['test'] = 13
                                                                                                        print("inside function myVars['test']:", myVars['test'])
                                                                                                        testLocalVar()
                                                                                                        print("outside function myVars['test']:", myVars['test'])

                                                                                                        # define a global variable
                                                                                                        myVars.defineGlobalVariable('globalVar', 12)
                                                                                                        def testGlobalVar():
                                                                                                        myVars = VariableVariablesManager()
                                                                                                        print("inside function myVars['globalVar']:", myVars['globalVar'])
                                                                                                        myVars['globalVar'] = 13
                                                                                                        print("inside function myVars['globalVar'] (having been changed):", myVars['globalVar'])
                                                                                                        testGlobalVar()
                                                                                                        print("outside function myVars['globalVar']:", myVars['globalVar'])


                                                                                                        If you wish to allow overwriting of variables with the same type only:



                                                                                                        myVars = VariableVariablesManager(enforceSameTypeOnOverride = True)
                                                                                                        myVars['test'] = 25
                                                                                                        myVars['test'] = "Cat" # <- raises Exception (different type on overwriting)





                                                                                                        share|improve this answer




























                                                                                                        • At first glance the long camelised imports made me think this was Java.

                                                                                                          – markroxor
                                                                                                          Feb 19 '18 at 6:17















                                                                                                        1


















                                                                                                        The consensus is to use a dictionary for this - see the other answers. This is a good idea for most cases, however, there are many aspects arising from this:



                                                                                                        • you'll yourself be responsible for this dictionary, including garbage collection (of in-dict variables) etc.

                                                                                                        • there's either no locality or globality for variable variables, it depends on the globality of the dictionary

                                                                                                        • if you want to rename a variable name, you'll have to do it manually

                                                                                                        • however, you are much more flexible, e.g.

                                                                                                          • you can decide to overwrite existing variables or ...

                                                                                                          • ... choose to implement const variables

                                                                                                          • to raise an exception on overwriting for different types

                                                                                                          • etc.


                                                                                                        That said, I've implemented a variable variables manager-class which provides some of the above ideas. It works for python 2 and 3.



                                                                                                        You'd use the class like this:



                                                                                                        from variableVariablesManager import VariableVariablesManager

                                                                                                        myVars = VariableVariablesManager()
                                                                                                        myVars['test'] = 25
                                                                                                        print(myVars['test'])

                                                                                                        # define a const variable
                                                                                                        myVars.defineConstVariable('myconst', 13)
                                                                                                        try:
                                                                                                        myVars['myconst'] = 14 # <- this raises an error, since 'myconst' must not be changed
                                                                                                        print("not allowed")
                                                                                                        except AttributeError as e:
                                                                                                        pass

                                                                                                        # rename a variable
                                                                                                        myVars.renameVariable('myconst', 'myconstOther')

                                                                                                        # preserve locality
                                                                                                        def testLocalVar():
                                                                                                        myVars = VariableVariablesManager()
                                                                                                        myVars['test'] = 13
                                                                                                        print("inside function myVars['test']:", myVars['test'])
                                                                                                        testLocalVar()
                                                                                                        print("outside function myVars['test']:", myVars['test'])

                                                                                                        # define a global variable
                                                                                                        myVars.defineGlobalVariable('globalVar', 12)
                                                                                                        def testGlobalVar():
                                                                                                        myVars = VariableVariablesManager()
                                                                                                        print("inside function myVars['globalVar']:", myVars['globalVar'])
                                                                                                        myVars['globalVar'] = 13
                                                                                                        print("inside function myVars['globalVar'] (having been changed):", myVars['globalVar'])
                                                                                                        testGlobalVar()
                                                                                                        print("outside function myVars['globalVar']:", myVars['globalVar'])


                                                                                                        If you wish to allow overwriting of variables with the same type only:



                                                                                                        myVars = VariableVariablesManager(enforceSameTypeOnOverride = True)
                                                                                                        myVars['test'] = 25
                                                                                                        myVars['test'] = "Cat" # <- raises Exception (different type on overwriting)





                                                                                                        share|improve this answer




























                                                                                                        • At first glance the long camelised imports made me think this was Java.

                                                                                                          – markroxor
                                                                                                          Feb 19 '18 at 6:17













                                                                                                        1














                                                                                                        1










                                                                                                        1









                                                                                                        The consensus is to use a dictionary for this - see the other answers. This is a good idea for most cases, however, there are many aspects arising from this:



                                                                                                        • you'll yourself be responsible for this dictionary, including garbage collection (of in-dict variables) etc.

                                                                                                        • there's either no locality or globality for variable variables, it depends on the globality of the dictionary

                                                                                                        • if you want to rename a variable name, you'll have to do it manually

                                                                                                        • however, you are much more flexible, e.g.

                                                                                                          • you can decide to overwrite existing variables or ...

                                                                                                          • ... choose to implement const variables

                                                                                                          • to raise an exception on overwriting for different types

                                                                                                          • etc.


                                                                                                        That said, I've implemented a variable variables manager-class which provides some of the above ideas. It works for python 2 and 3.



                                                                                                        You'd use the class like this:



                                                                                                        from variableVariablesManager import VariableVariablesManager

                                                                                                        myVars = VariableVariablesManager()
                                                                                                        myVars['test'] = 25
                                                                                                        print(myVars['test'])

                                                                                                        # define a const variable
                                                                                                        myVars.defineConstVariable('myconst', 13)
                                                                                                        try:
                                                                                                        myVars['myconst'] = 14 # <- this raises an error, since 'myconst' must not be changed
                                                                                                        print("not allowed")
                                                                                                        except AttributeError as e:
                                                                                                        pass

                                                                                                        # rename a variable
                                                                                                        myVars.renameVariable('myconst', 'myconstOther')

                                                                                                        # preserve locality
                                                                                                        def testLocalVar():
                                                                                                        myVars = VariableVariablesManager()
                                                                                                        myVars['test'] = 13
                                                                                                        print("inside function myVars['test']:", myVars['test'])
                                                                                                        testLocalVar()
                                                                                                        print("outside function myVars['test']:", myVars['test'])

                                                                                                        # define a global variable
                                                                                                        myVars.defineGlobalVariable('globalVar', 12)
                                                                                                        def testGlobalVar():
                                                                                                        myVars = VariableVariablesManager()
                                                                                                        print("inside function myVars['globalVar']:", myVars['globalVar'])
                                                                                                        myVars['globalVar'] = 13
                                                                                                        print("inside function myVars['globalVar'] (having been changed):", myVars['globalVar'])
                                                                                                        testGlobalVar()
                                                                                                        print("outside function myVars['globalVar']:", myVars['globalVar'])


                                                                                                        If you wish to allow overwriting of variables with the same type only:



                                                                                                        myVars = VariableVariablesManager(enforceSameTypeOnOverride = True)
                                                                                                        myVars['test'] = 25
                                                                                                        myVars['test'] = "Cat" # <- raises Exception (different type on overwriting)





                                                                                                        share|improve this answer
















                                                                                                        The consensus is to use a dictionary for this - see the other answers. This is a good idea for most cases, however, there are many aspects arising from this:



                                                                                                        • you'll yourself be responsible for this dictionary, including garbage collection (of in-dict variables) etc.

                                                                                                        • there's either no locality or globality for variable variables, it depends on the globality of the dictionary

                                                                                                        • if you want to rename a variable name, you'll have to do it manually

                                                                                                        • however, you are much more flexible, e.g.

                                                                                                          • you can decide to overwrite existing variables or ...

                                                                                                          • ... choose to implement const variables

                                                                                                          • to raise an exception on overwriting for different types

                                                                                                          • etc.


                                                                                                        That said, I've implemented a variable variables manager-class which provides some of the above ideas. It works for python 2 and 3.



                                                                                                        You'd use the class like this:



                                                                                                        from variableVariablesManager import VariableVariablesManager

                                                                                                        myVars = VariableVariablesManager()
                                                                                                        myVars['test'] = 25
                                                                                                        print(myVars['test'])

                                                                                                        # define a const variable
                                                                                                        myVars.defineConstVariable('myconst', 13)
                                                                                                        try:
                                                                                                        myVars['myconst'] = 14 # <- this raises an error, since 'myconst' must not be changed
                                                                                                        print("not allowed")
                                                                                                        except AttributeError as e:
                                                                                                        pass

                                                                                                        # rename a variable
                                                                                                        myVars.renameVariable('myconst', 'myconstOther')

                                                                                                        # preserve locality
                                                                                                        def testLocalVar():
                                                                                                        myVars = VariableVariablesManager()
                                                                                                        myVars['test'] = 13
                                                                                                        print("inside function myVars['test']:", myVars['test'])
                                                                                                        testLocalVar()
                                                                                                        print("outside function myVars['test']:", myVars['test'])

                                                                                                        # define a global variable
                                                                                                        myVars.defineGlobalVariable('globalVar', 12)
                                                                                                        def testGlobalVar():
                                                                                                        myVars = VariableVariablesManager()
                                                                                                        print("inside function myVars['globalVar']:", myVars['globalVar'])
                                                                                                        myVars['globalVar'] = 13
                                                                                                        print("inside function myVars['globalVar'] (having been changed):", myVars['globalVar'])
                                                                                                        testGlobalVar()
                                                                                                        print("outside function myVars['globalVar']:", myVars['globalVar'])


                                                                                                        If you wish to allow overwriting of variables with the same type only:



                                                                                                        myVars = VariableVariablesManager(enforceSameTypeOnOverride = True)
                                                                                                        myVars['test'] = 25
                                                                                                        myVars['test'] = "Cat" # <- raises Exception (different type on overwriting)






                                                                                                        share|improve this answer















                                                                                                        share|improve this answer




                                                                                                        share|improve this answer








                                                                                                        edited Jun 9 '16 at 12:10

























                                                                                                        answered Jun 9 '16 at 11:47









                                                                                                        DomTomCatDomTomCat

                                                                                                        4,8101 gold badge31 silver badges49 bronze badges




                                                                                                        4,8101 gold badge31 silver badges49 bronze badges















                                                                                                        • At first glance the long camelised imports made me think this was Java.

                                                                                                          – markroxor
                                                                                                          Feb 19 '18 at 6:17

















                                                                                                        • At first glance the long camelised imports made me think this was Java.

                                                                                                          – markroxor
                                                                                                          Feb 19 '18 at 6:17
















                                                                                                        At first glance the long camelised imports made me think this was Java.

                                                                                                        – markroxor
                                                                                                        Feb 19 '18 at 6:17





                                                                                                        At first glance the long camelised imports made me think this was Java.

                                                                                                        – markroxor
                                                                                                        Feb 19 '18 at 6:17











                                                                                                        0


















                                                                                                        Any set of variables can also be wrapped up in a class.
                                                                                                        "Variable" variables may be added to the class instance during runtime by directly accessing the built-in dictionary through __dict__ attribute.



                                                                                                        The following code defines Variables class, which adds variables (in this case attributes) to its instance during the construction. Variable names are taken from a specified list (which, for example, could have been generated by program code):



                                                                                                        # some list of variable names
                                                                                                        L = ['a', 'b', 'c']

                                                                                                        class Variables:
                                                                                                        def __init__(self, L):
                                                                                                        for item in L:
                                                                                                        self.__dict__[item] = 100

                                                                                                        v = Variables(L)
                                                                                                        print(v.a, v.b, v.c)
                                                                                                        #will produce 100 100 100





                                                                                                        share|improve this answer






























                                                                                                          0


















                                                                                                          Any set of variables can also be wrapped up in a class.
                                                                                                          "Variable" variables may be added to the class instance during runtime by directly accessing the built-in dictionary through __dict__ attribute.



                                                                                                          The following code defines Variables class, which adds variables (in this case attributes) to its instance during the construction. Variable names are taken from a specified list (which, for example, could have been generated by program code):



                                                                                                          # some list of variable names
                                                                                                          L = ['a', 'b', 'c']

                                                                                                          class Variables:
                                                                                                          def __init__(self, L):
                                                                                                          for item in L:
                                                                                                          self.__dict__[item] = 100

                                                                                                          v = Variables(L)
                                                                                                          print(v.a, v.b, v.c)
                                                                                                          #will produce 100 100 100





                                                                                                          share|improve this answer




























                                                                                                            0














                                                                                                            0










                                                                                                            0









                                                                                                            Any set of variables can also be wrapped up in a class.
                                                                                                            "Variable" variables may be added to the class instance during runtime by directly accessing the built-in dictionary through __dict__ attribute.



                                                                                                            The following code defines Variables class, which adds variables (in this case attributes) to its instance during the construction. Variable names are taken from a specified list (which, for example, could have been generated by program code):



                                                                                                            # some list of variable names
                                                                                                            L = ['a', 'b', 'c']

                                                                                                            class Variables:
                                                                                                            def __init__(self, L):
                                                                                                            for item in L:
                                                                                                            self.__dict__[item] = 100

                                                                                                            v = Variables(L)
                                                                                                            print(v.a, v.b, v.c)
                                                                                                            #will produce 100 100 100





                                                                                                            share|improve this answer














                                                                                                            Any set of variables can also be wrapped up in a class.
                                                                                                            "Variable" variables may be added to the class instance during runtime by directly accessing the built-in dictionary through __dict__ attribute.



                                                                                                            The following code defines Variables class, which adds variables (in this case attributes) to its instance during the construction. Variable names are taken from a specified list (which, for example, could have been generated by program code):



                                                                                                            # some list of variable names
                                                                                                            L = ['a', 'b', 'c']

                                                                                                            class Variables:
                                                                                                            def __init__(self, L):
                                                                                                            for item in L:
                                                                                                            self.__dict__[item] = 100

                                                                                                            v = Variables(L)
                                                                                                            print(v.a, v.b, v.c)
                                                                                                            #will produce 100 100 100






                                                                                                            share|improve this answer













                                                                                                            share|improve this answer




                                                                                                            share|improve this answer










                                                                                                            answered Aug 11 '17 at 21:13









                                                                                                            Alexey RodimovAlexey Rodimov

                                                                                                            775 bronze badges




                                                                                                            775 bronze badges


















                                                                                                                protected by Bhargav Rao Apr 21 '16 at 15:03



                                                                                                                Thank you for your interest in this question.
                                                                                                                Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



                                                                                                                Would you like to answer one of these unanswered questions instead?



                                                                                                                Popular posts from this blog

                                                                                                                Kamusi Yaliyomo Aina za kamusi | Muundo wa kamusi | Faida za kamusi | Dhima ya picha katika kamusi | Marejeo | Tazama pia | Viungo vya nje | UrambazajiKuhusu kamusiGo-SwahiliWiki-KamusiKamusi ya Kiswahili na Kiingerezakuihariri na kuongeza habari

                                                                                                                SQL error code 1064 with creating Laravel foreign keysForeign key constraints: When to use ON UPDATE and ON DELETEDropping column with foreign key Laravel error: General error: 1025 Error on renameLaravel SQL Can't create tableLaravel Migration foreign key errorLaravel php artisan migrate:refresh giving a syntax errorSQLSTATE[42S01]: Base table or view already exists or Base table or view already exists: 1050 Tableerror in migrating laravel file to xampp serverSyntax error or access violation: 1064:syntax to use near 'unsigned not null, modelName varchar(191) not null, title varchar(191) not nLaravel cannot create new table field in mysqlLaravel 5.7:Last migration creates table but is not registered in the migration table

                                                                                                                은진 송씨 목차 역사 본관 분파 인물 조선 왕실과의 인척 관계 집성촌 항렬자 인구 같이 보기 각주 둘러보기 메뉴은진 송씨세종실록 149권, 지리지 충청도 공주목 은진현