Re: list.sort, keyword only arguments?
От: Temoto  
Дата: 16.09.10 15:05
Оценка: 8 (1) +1
L_L>Интересно, я получаю такое сообщение об ошибке:

L_L>
L_L>lst = ['daba', 'Aba', 'Haba']
L_L>lst.sort(str.lower)#lst.sort(key=str.lower)
L_L>


L_L>

L_L>Traceback (most recent call last):
L_L> File "<stdin>", line 1, in <module>
L_L>TypeError: must use keyword argument for key function


L_L>Каким образом должна быть определена функция, чтобы интерпретатор выдал такое сообщение?


Ну это же очевидно:

http://www.google.com/codesearch/p?hl=en#BhM2hRzY7ME/trunk/Python-2.6.4/Objects/listobject.c&amp;q=%5Elistsort%20lang:c%20package:cpython&amp;sa=N&amp;cd=1&amp;ct=rc&amp;l=2031

                if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOi:sort",
                        kwlist, &compare, &keyfunc, &reverse))
                        return NULL;



Если вас интересует, как определить такую функцию на питоне, то никак. Но можно сымитировать примерно так

def require_kwarg(kwargs, name, error_msg):
  try:
    return kwargs[name]
  except KeyError:
    raise TypeError(error_msg)


def list_sort(**kwargs):
  key = require_kwarg(kwargs, 'key', "must use keyword argument for key function")
  ...


Ну, хотя бы из boilerplate вроде очевидно, что лучше так не делать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.