122

:=より具体的には Pythonの場合、オペランドは何を意味しますか?

誰かがこのコードのスニペットの読み方を説明できますか?

node := root, cost = 0
frontier := priority queue containing node only
explored := empty set
4

5 に答える 5

121

更新された回答

質問のコンテキストでは、疑似コードを扱っていますが、Python 3.8以降で:=は、実際には式内の変数の割り当てを可能にする有効な演算子です。

# Handle a matched regex
if (match := pattern.search(data)) is not None:
    # Do something with match

# A loop that can't be trivially rewritten using 2-arg iter()
while chunk := file.read(8192):
   process(chunk)

# Reuse a value that's expensive to compute
[y := f(x), y**2, y**3]

# Share a subexpression between a comprehension filter clause and its output
filtered_data = [y for x in data if (y := f(x)) is not None]

詳細はPEP 572を参照してください。

元の回答

あなたが見つけたのは疑似コードです

疑似コードは、コンピューター プログラムまたはその他のアルゴリズムの動作原理を非公式に高レベルで記述したものです。

:=実際には代入演算子です。Python では、これは単に=.

この疑似コードを Python に変換するには、参照されるデータ構造と、アルゴリズムの実装についてもう少し知る必要があります。

疑似コードに関する注意事項:

  • :=代入演算子または=Python
  • =等値演算子または==Python
  • 特定のスタイルがあり、走行距離は異なる場合があります。

パスカル式

procedure fizzbuzz
For i := 1 to 100 do
    set print_number to true;
    If i is divisible by 3 then
        print "Fizz";
        set print_number to false;
    If i is divisible by 5 then
        print "Buzz";
        set print_number to false;
    If print_number, print i;
    print a newline;
end

Cスタイル

void function fizzbuzz
For (i = 1; i <= 100; i++) {
    set print_number to true;
    If i is divisible by 3
        print "Fizz";
        set print_number to false;
    If i is divisible by 5
        print "Buzz";
        set print_number to false;
    If print_number, print i;
    print a newline;
}

ブレースの使用法と代入演算子の違いに注意してください。

于 2014-09-23T16:41:24.260 に答える
13

10 月 14 日の 3.8 リリースおめでとうございます!

:=より大きな式の一部として変数に値を割り当てる新しい構文があります。セイウチの目と牙に似ていることから、「セイウチのオペレーター」として親しみを込めて知られています。

この例では、代入式がlen()2 回の呼び出しを回避するのに役立ちます。

if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")

Python 3.8 の新機能 - 代入式

于 2019-10-21T14:09:29.733 に答える