Я знаю об одинарной и двойной звездочках, предшествующих параметрам (для переменного количества параметров), но это ничему не предшествует. И я почти уверен, что это не имеет никакого отношения к pickle. Вероятно, это просто пример того, как это происходит. Я узнал его название, только когда отправил это в интерпретатор:
>>> deffunc(*): ... pass ... File "<stdin>", line 1 SyntaxError: named arguments must follow bare *
Если это имеет значение, я на python 3.3.0.
Переведено автоматически
Ответ 1
Пустая * используется, чтобы заставить вызывающую функцию использовать именованные аргументы - поэтому вы не можете определить функцию с * в качестве аргумента, если у вас нет следующих ключевых аргументов.
Хотя исходный ответ полностью отвечает на вопрос, просто добавляя немного связанной информации. Поведение единственной звездочки вытекает из PEP-3102. Цитирую соответствующий раздел:
The second syntactical change is to allow the argument name to be omitted for a varargs argument. The meaning of this is to allow for keyword-only arguments for functions that would not otherwise take a varargs argument:
def compare(a, b, *, key=None): ...
Простым английским это означает, что для передачи значения для key вам нужно будет явно передать его как key="value".
deffunc(*, a, b, **kwargs): print(a) print(b) print(kwargs)
func(a="aa",b="bb", c="cc") # aa, bb, {'c': 'cc'}
Ответ 4
Семантически это означает, что следующие за ним аргументы содержат только ключевое слово, поэтому вы получите сообщение об ошибке, если попытаетесь предоставить аргумент без указания его имени. Например:
>>> deff(a, *, b): ... return a + b ... >>> f(1, 2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: f() takes 1 positional argument but 2 were given >>> f(1, b=2) 3
С практической точки зрения это означает, что вы должны вызывать функцию с ключевым аргументом. Обычно это делается, когда трудно понять назначение аргумента без подсказки, данной именем аргумента.
Сравните, например, sorted(nums, reverse=True) с тем, если бы вы написали sorted(nums, True). Последнее было бы гораздо менее читабельным, поэтому разработчики Python решили заставить вас написать его первым способом.