web-dev-qa-db-ja.com

:=演算子とは何ですか?

一部のプログラミング言語では、次のように表示されます(例)。

x := y

これは何ですか :=オペレーターは一般的に呼ばれ、それは何をしますか?

12
Cole Johnson

これは、Python 3.8になり、実際にはBDFL Guido vanRossumの早期引退に関与した新しい演算子です。

正式には、演算子は「代入式」と呼ばれるものを許可します。非公式には、この演算子は「セイウチ演算子」と呼ばれます。

式を評価しながら割り当てを行うことができます。

したがって、この:

env_base = os.environ.get("PYTHONUSERBASE", None)
if env_base:
    return env_base

次のように短縮できます。

if env_base := os.environ.get("PYTHONUSERBASE", None):
    return env_base

https://www.python.org/dev/peps/pep-0572/#examples-from-the-python-standard-library

1
Alex W

このシンボルは「becomes」と呼ばれ、IAL(後にALGOL 58と呼ばれる)およびALGOL 60で導入されました。これは、変数に値を割り当てるためのシンボルです。 「xがyになる」とx := y;を読みます。

割り当てに「=」ではなく「:=」を使用することは、数学的な面倒さです。そのような観点からすると、「x = x +1」は無意味です。他の現代の言語では、割り当てに左矢印を使用している可能性がありますが、それは多くの文字セットで(単一の文字として)一般的ではありませんでした。

ALGOL 68は、識別と割り当てをさらに区別しました。 INT the answer = 42;は、「答え」が42と同じように宣言されていることを示します(つまり、定数値です)。 INT the answer := 42;では、「答え」は変数として宣言され、最初に値42が割り当てられます。

+:=のように、プラスとなると発音される他の割り当て記号があります。 x +:= yはxの現在の値にyを追加し、結果をxに格納します。

(スペースには意味がないため、アンダースコアをいじる必要はなく、識別子の「中に」挿入できます)

1
user10762593

多くの言語は一般的な演算子を使用しています。一般的に=は変数の割り当て用に予約されており、単独の場合は数学的なコンテキストで表示しないでください。 JavaやBashなどの一部の言語での同等性は==

1
thejartender

PL/Iは=:=の両方を持っています(持っていましたか?)。 =は、割り当てと比較の両方に使用されます。コンパイラーは、コンテキストに基づいて、ユーザーがどちらを意味しているかを判断しようとします。本当に割り当てを意味する場所で比較を行うことにした場合は、:=を使用して割り当てを強制できます。

たとえば、x=y=0;を考えてみましょう。Cでは(一例として)、これは「0をyに割り当て、その結果(0も)をxに割り当てる」ことを意味します。

PL/Iでは、yを0と比較し、その比較のブール結果をxに割り当てることを意味します(つまり、Cのようなもののx = y == 0;と同等です)。 (PL/Iの設計者とは異なり、正気である)「xとyに0を割り当てる」ことを意図している場合は、x = y := 0;(またはx := y := 0;)を使用します。

1
Jerry Coffin