lambda
wyraźnie jest słowem kluczowym; jest to specjalne słowo rozpoznawane przez analizator składni, które w innym wypadku należałoby do definicji identifier
.
lambda
nie jest semantycznie operator. Operator jest po prostu funkcją, ale wywoływany z inną składnią. Możemy sobie wyobrazić zastąpienie operatora +
funkcją add
; wszystkie nasze programy z dodatkiem będą bardziej szczegółowe i trudniejsze do odczytania, ale możemy je jeszcze napisać. Z drugiej strony konstrukcja językowa lambda
nie mogła zostać zastąpiona przez funkcję; lambda x: x+1
to nie tylko obliczenie wyniku z wartości x
i x+1
, ponieważ w tym kontekście nie są one wcale wartościami (x
to nazwa parametru do definiowanej funkcji, a x+1
to kod korpusu lambda).
W tej samej strony, połączone do mamy: http://docs.python.org/py3k/reference/lexical_analysis.html#operators
tokeny są następujące podmioty:
+ - * ** / // %
<< >> & | ^ ~
< > <= >= == !=
To całą zawartość podsekcji na operatorów. Z tego rozumiem, że w kontekście definiowania tokenów języka "operatorzy" są operatorami symbolicznymi, podczas gdy w sekcji słowa kluczowe wyraźnie stwierdza się, że "te rzeczy, które w innym przypadku byłyby identyfikatorami, są słowami kluczowymi". Dlatego myślę, że operatory słów kluczowych, takie jak not
, is
, in
, itp. Nie są wymienione. Ale na pewno istnieją rzeczy, które są semantycznymi operatorami, które są słowami kluczowymi, niezależnie od tego, czy parser uważa je za oddzielne klasy.
Nie jestem pewien, dlaczego http://docs.python.org/py3k/reference/expressions.html#summary opisuje lambda
jako operator; Na pewno nie. Ściśle mówiąc, nie mówi się wprost "lambda
jest operatorem o najniższym priorytecie", to po prostu lista lambda
w tabeli, której nagłówek kolumny to "Operator". Być może to była tylko wygoda; opisanie lambda
jako rzeczy o niskim priorytecie jest dobrym sposobem wyjaśnienia, w jaki sposób Python będzie analizować lambda x: x + 1
(teoretycznie może to być (lambda x: x) + 1
lub lambda x: (x + 1)
).
Jestem prawie pewien, że rozsądnie jest nazywać 'lambda' słowem kluczowym, a nie operatorem. – alberge
@alberge Jakie jest twoje rozumowanie? – Paragon
Ja wyraźnie zacisnąłem palce przed mózgiem. Kilka słów kluczowych w języku Pythona * to * operatory. Wygląda na to, że nakładają się na siebie. – alberge