< Tim informs ...> > So this is what you can expect (or rail against) in the indefinite future: > > 1. Python will eventually enforce the Ref Man's warnings against trying > to modify locals(), whether directly or indirectly. uh-oh ... I guess I'm in violation of the intended policy. I have a class that acts as a poor-man's spreadsheet in a GUI application. I show a table and label the column headers as c1, c2, ... For the last column (rightmost) I allow the user to input a formula such as c1/c2 and use it to compute the values for that (rightmost) column. A simplified version of the code (please excuse typo.s) looks like: ... my class ... def setFormula(self,formulaString): self.formula = formulaString def getCalculatedValueAt(self,rowIndex): count = self.getColumnCount() # excludes the calculated column localsDict = locals() for columnIndex in xrange(count): columnID = 'c' + str(columnIndex+1) columnValue = self.getValueAt(rowIndex,columnIndex) localsDict[columnID] = columnValue try: value = eval(self.formula) except: value = 'Invalid formula' return value It seems like the alternatives are: o build up an assignment statement in a string and do an exec (yuk, columnValue is already a perfectly good object) o use the instance dict and then preprocess the formula to change (e.g.) c1 to self.c1 (yuk) o use globals() and then add another loop at the end to delete the newly created global variables (to avoid interference with other instances of the class) I guess using globals() is ok, but locals() seems so much nicer. :-) Any other suggestions? Thanks, Jim
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4