
On Sat, Feb 14, 2015 at 3:38 PM, Chris Barker <chris.barker@noaa.gov> wrote:
In [25]: (l1 + l2) += [3] File "<ipython-input-25-b8781c271c74>", line 1 (l1 + l2) += [3] SyntaxError: can't assign to operator
which makes sense -- the LHS is an expression that results in a list, but += is trying to assign to that object. HOw can there be anything other than a single object on the LHS?
You'd have to subscript it or equivalent.
options = {} def get_option_mapping(): mode = input("Pick an operational mode: ") if not mode: mode="default" if mode not in options: options[mode]=defaultdict(int) return options[mode] get_option_mapping()["width"] = 100 Pick an operational mode: foo options {'foo': defaultdict(<class 'int'>, {'width': 100})}
Sure, you could assign the dict to a local name, but there's no need - you can subscript the return value of a function, Python is not PHP. (Though, to be fair, PHP did fix that a few years ago.) And if it works with regular assignment, it ought to work with augmented... and it does:
get_option_mapping()["width"] += 10 Pick an operational mode: foo get_option_mapping()["width"] += 10 Pick an operational mode: bar options {'foo': defaultdict(<class 'int'>, {'width': 110}), 'bar': defaultdict(<class 'int'>, {'width': 10})}
The original function gets called exactly once, and then the augmented assignment is done using the resulting dict. ChrisA