

Pythonで=（代入記号）は演算子ではない  
と言われますが、  
では演算子という言葉の定義は何なのでしょうか？

Pythonの場合と、他の言語で違う場合は、両方教えていただけると幸いです。


CC BY-SA 4.0
2021-04-03T00:27:05.240
75056
2021-04-03T01:35:16.300
40961
question
python
「演算子」という言葉の定義は？(Python 、他言語)


私の知る限り、「演算子 (operator)」という言葉について Python
一般で広く使われている公式の定義は無いはずです。もう少し限定して「Python の字句解析に置ける
operator」だったら[定義があったりします](https://docs.python.org/3.9/reference/lexical_analysis.html#operators)が、だからと言って代入の
`=` を演算子と呼んではいけないとまでは言い切れないはずです。Python ドキュメントの[用語集
(Glossary)](https://docs.python.org/3.9/glossary.html) にも "operator"
は載っていませんし、言葉の綾かもしれませんが 1 箇所 "assignment operator"
と書いてある箇所も[あります](https://docs.python.org/3.9/reference/simple_stmts.html#assignment-
statements)。

ただし、よくある区別としては、Python の代入は「[文
(statement)](https://docs.python.org/3.9/glossary.html#term-statement)」であるが「[式
(expression)](https://docs.python.org/3.9/glossary.html#term-
expression)」ではない、という話があります。つまり、Python における代入は値を返しません。具体的には `a = (b = 42)`
と書いても `b = 42` が何かしら値を返す訳ではなく、エラーになります。

プログラミング言語の中には、代入が値を返す言語もあります。たとえば C 言語では `b = 42` を評価した際に変数 `b` に `42`
を代入するだけでなく `42` を返り値として返すので、`a = (b = 42)` と書くと変数 `a` にも `42` が代入されます。C
言語においては代入も何かしら値を返す "式" と考えることができます。

まとめると、Python の代入 `=` を分かりやすさのために「代入演算子」と呼ぶこともありますが、`+` や `==`
といった他の演算子とは性質が異なり、値を返しません。他のプログラミング言語では値を返すように設計されていることもありますが、Python
では値を返しません。


CC BY-SA 4.0
2021-04-03T01:10:12.003
75057
2021-04-03T01:10:12.003
19110
75056
answer


一般論として、プログラミング言語では **expression; 式** と **statement; 文** とを区別しています。`1 + 1`は
**式** ですし、以下は **if文** です。

[code]

    if x > y:
        x
    else:
        y
    
[/code]

そして、 **文** に **式** を含めることはできますが、その逆、 **式** に **文** を含めることはできません。何を **式** とし、何を
**文** とするかはプログラミング言語毎に異なります。

その上で、 **式** を構成する要素に **operator; 演算子** があります。`1 + 1`では **加算演算子** が登場しています。

* * *

という前提の元、Pythonにおける[ **演算子**
は次のように定義](https://docs.python.org/ja/3/reference/lexical_analysis.html#operators)されています。

> ## 2.5. 演算子
>
> 以下のトークンは演算子です:
[code]

>     +       -       *       **      /       //      %      @
>     <<      >>      &       |       ^       ~       :=
>     <       >       <=      >=      ==      !=
>  
[/code]

見ての通り、 **演算子** の一覧に`=`は含まれていません。`=`はどこで定義されているかというと[ **assignment statement;
代入文**](https://docs.python.org/ja/3/reference/simple_stmts.html#assignment-
statements)となっています。

もちろん他の言語での定義はそれぞれ異なります。一例として[C++言語における`=`は代入演算子](https://ja.cppreference.com/w/cpp/language/operator_assignment)となっています。


CC BY-SA 4.0
2021-04-03T01:35:16.300
75058
2021-04-03T01:35:16.300
4236
75056
answer