Sort with extra variables
Thomas Dybdahl Ahle
lobais at gmail.com
Fri Mar 2 18:11:56 EST 2007
Den Fri, 02 Mar 2007 20:33:45 +0100 skrev Diez B. Roggisch:
> Thomas Dybdahl Ahle schrieb:
>> I have a sort function in a python chess program. Currently it looks
>> like this:
>>
>> def sortMoves (board, table, ply, moves):
>> f = lambda move: getMoveValue (board, table, ply, move)
>> moves.sort(key=f, reverse=True)
>> return moves
>>
>> However I'd really like not to use the lambda, as it slows down the
>> code.
>>
>> I've thought about saving the extra variables in the global space, but
>> it really feals ugly.
>>
>> Do you have any ideas how I can sort these moves the fastest?
>
> First of all, in your case it is somewhat strange to use
> f = lambda ...
> because then you could as well use
> def f(move):
> ....
Wouldn't that be just as slow?
> But that is just a general remark. Regarding the question: I don't see
> how that could possibly become faster without much more insight into
> what you are doing in getMoveValue. As it seems, it is dependend of a
> lot of factors that change often, so caching it isn't a real option. And
> I hope you are aware that the key-method is invoked only _once_ per
> list-item!
Yeah, key is a nice thing. My only problem is that I need these other
objects to generate the value, and I don't want to create a new function
each time..
In my profiling the functions with the lambda line says 860 cumtime and
getMoveValue says 580.
More information about the Python-list
mailing list