6

Python 3.2では、これによると:http: //docs.python.org/py3k/reference/expressions.html#summary

lambdaPythonで優先順位が最も低い演算子です。

そしてこれによると:http://docs.python.org/py3k/reference/lexical_analysis.html#keywords

lambdaPython言語のキーワードです。

ただし、これによると:http: //docs.python.org/py3k/reference/lexical_analysis.html#other-tokens

演算子とキーワードは別個のエンティティです。

私はPython3.2を誰かに体系的に説明しようとしていますが、混乱させたくありません。しかし、私自身、演算子とキーワードの正確な定義について混乱しています。

私の推測では、「演算子」という用語は、PythonパーサーとPythonレクサーのコンテキストで使用すると少し異なる意味になります。

4

3 に答える 3

4

演算子とキーワードは別個のエンティティです。

いいえ、そうではないです。、、、、、、そして私はさらにいくつかが両方であると確信してisinますandornot

于 2012-04-04T05:16:44.587 に答える
2

それは、それらが相互に排他的であるということではなく、それだけです。

「次のカテゴリのトークンが存在します:識別子、キーワード、リテラル、演算子、および区切り文字」

私は人とアメリカ人のカテゴリーにいます。確かに、それらが相互に排他的であることを意味する場合があります。その場合、ドキュメントに一貫性がありません。

于 2012-04-04T05:16:15.627 に答える
2

lambda明らかにキーワードです。これはパーサーによって認識される特別な単語であり、そうでなければ。の定義に含まれますidentifier

lambda意味的には演算子ではありません。演算子は単なる関数ですが、異なる構文で呼び出されます。+演算子をadd関数に置き換えることを想像できます。追加されたすべてのプログラムは、より冗長になり、読みにくくなりますが、それでも書き込むことができます。一方lambda、言語構成は関数に置き換えることができませんでした。は、値とlambda x: x+1の結果を計算するだけではありません。これは、このコンテキストでは値ではないためです(は、定義されている関数のパラメーターの名前であり、ラムダ本体のコードです)。xx+1xx+1

リンクした同じページに次の情報があります:http://docs.python.org/py3k/reference/lexical_analysis.html#operators

次のトークンは演算子です。

+       -       *       **      /       //      %
<<      >>      &       |       ^       ~
<       >       <=      >=      ==      !=

これが、演算子に関するサブセクションの内容全体です。このことから、言語のトークンを定義する文脈では、「演算子」は記号演算子であるのに対し、キーワードのセクションで、「そうでなければ識別子になるこれらのものはキーワードである」と明示的に綴っています。そのため、、、、などnotのキーワード演算子はリストされていないと思います。しかし、パーサーがそれらを別々のクラスと見なすかどうかに関係なく、キーワードである意味演算子であるものは確かにあります。isin

http://docs.python.org/py3k/reference/expressions.html#summarylambdaが演算子として記述されている理由がわかりません。私は確かにそうしません。厳密に言えば、「優先順位が最も低い演算子である」と明示的に言うのではなく、列見出しが「演算子」であるテーブルlambdaにリストするだけです。lambdaおそらくそれは単なる便宜でした。lambda優先順位の低いものとして記述することは、Pythonがどのように解析するかを明確にする良い方法ですlambda x: x + 1(理論的にはまたはのいずれかである可能性があります(lambda x: x) + 1lambda x: (x + 1)

于 2012-04-04T07:08:16.253 に答える