web-dev-qa-db-ja.com

Pythonのコロン(=)はどういう意味ですか?

:=オペランドの意味、具体的にはPythonの意味を教えてください。

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

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

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

http://en.wikipedia.org/wiki/Pseudocode

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

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

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

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

:=は代入演算子または= Python

=は等値演算子または== Python

擬似コードには特定のスタイルがあり、走行距離が異なる場合があることに注意してください。

PascalスタイルのPseudoCode

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;
}

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

11
Mike McMahon

PEP572 Pythonでの:=演算子のサポートを提案して、式内での変数割り当てを可能にします。

この構文は、Python 3.8。

36
chadlagore

問題のコードは疑似コードです。そこで、:=は割り当てを表します。

ただし、将来の訪問者にとっては、次のほうがより適切かもしれません。Python(3.8)の次のバージョンは、新しい演算子:=を取得し、割り当て式(詳細、動機付けの例、および議論は、2018年6月下旬に暫定的に承認された PEP 572 にあります)。

この新しい演算子を使用すると、次のように記述できます。

if (m := re.search(pat, s)):
    print m.span()
else if (m := re.search(pat2, s):
    …

while len(bytes := x.read()) > 0:
    … do something with `bytes`

[stripped for l in lines if len(stripped := l.strip()) > 0]

これらの代わりに:

m = re.search(pat, s)
if m:
    print m.span()
else:
    m = re.search(pat2, s)
    if m:
        …

while True:
    bytes = x.read()
    if len(bytes) <= 0:
        return
    … do something with `bytes`

[l for l in (l.stripped() for l in lines) if len(l) > 0]
23
Clément