On 5/23/2013 12:36 PM, Haoyi Li wrote:
The question is, how would you _specify_ that option?
This seems like the perfect use case for function annotations, or a decorator. I imagine both cases would look rather pretty
def func(**kwargs: ordered): ...
Guido has more or less rejected annotations because checking for an anotation would slow down every function call for the benefit of very few.
@ordered_kwargs def func(**kwargs): ...
Returning a function with a custom ordered kwargs .__call__ method would not affect normal functions. func.__class__ cannot be changed from Python code (non-heap type) but I don't know about from C. In any case, the attributes (components) of func could be fed to an okw_function (ordered keyword function) class to produce an new object.
The decorator approach immediately fails for a system without the decorator. Since it should only be used for funcs that require the ordering, I think that would be appropriate.