Inline Calculation of Dictionary Values

Peter Otten __peter__ at web.de
Wed Apr 21 18:32:11 CEST 2010


Dave Angel wrote:

> ++imanshu wrote:
>> Hi,
>>
>>      Is it possible to something along these lines in python :-
>>
>> map = {
>> 'key1': f(),
>> 'key2': modify_state(); val = f(); restore_state(); val,
>> 'key3': f(),
>> }
>>
>>       For 'key2' I want to store the value returned by f() but after
>> modifying the state. Do we have something like a "bare block". I am
>> trying to avoid this :-
>>
>> def f2():
>>      modify_state()
>>      val = f()
>>      restore_state()
>>      return val
>>
>> map = {
>> 'key1': f(),
>> 'key2': f2()
>> 'key3': f(),
>> }
>>
>> Thank You,
>> Himanshu
>>
>>   
> How about something like:
> 
> mymap = {
> 'key1': f(),
> 'key2': [modify_state(), f(), restore_state()][1],
> 'key3': f(),
> }
> 
> This builds a list of three values, and uses only the [1] item from the
> list.

Please think of the children ;)

The function based approach is the way to go:

def f2():
    cookie = modify_state()
    try:
        return f()
    finally:
        restore_state(cookie)

This will restore the state even if f() raises an exception.

If you want something more fancy you can parameterize f2() by the three 
functions or look into context managers.

Peter



More information about the Python-list mailing list