Python:=ゾウ演算子
背景:python 3.8の正式版が最近更新され、PEP 572の海象演算子が正式pythonバージョンのサポートを受けた.私は公式サイトのドキュメントと他の大神が書いたものを見て、私は将来のpython文の中でとても実用的なものだと感じて、だからこのブログを書いて紹介して、同時に自分で新版の特性を勉強して、我が社の生産環境はまだ3.6にとどまっていますが、私に新鮮なものを味わうことに影響しません.
ps:3.8の新しいプロパティWebサイトです.https://docs.python.org/3/whatsnew/3.8.html
公式サイト紹介:Assignment expressions(付与式)
There is new syntax := that assigns values to variables as part of a larger expression. It is affectionately known as “the walrus operator” due to its resemblance to the eyes and tusks of a walrus.
私达はこの新しい1种の文法を开発して、それは1つの强大な表现で、表现の一部を変数に与えることができて、海象の目と象牙に似ているため、海象の操縦者になります(雷の感じをコントロールします(~-^).少しぼんやりしているように聞こえますが、私の翻訳のレベルが足りないのかもしれません.
説明の後、公式サイトはいくつかの例をあげました.
1
この例では、海象式を用いることでlen()メソッドを2回実行することを回避し、実行速度を向上させることを強調する.
もし海象演算子がない場合、私たちはどのようにこのコードを書きますか?試してみましょう
あるいは、lenメソッドを2回使用することを避け、中間変数に値を割り当てるステップを1回以上加えた.
一つの利点はここにあると思います.中間変数を割り当てるステップを省くことができます.
2
次に、ドキュメントでは、海象演算子の正則への応用について2つ目の例を示します.
背景はこのようにすべきで、コードは1段のadvertisementのテキストの中から、割引のパーセントを得て、それから除算によってパーセント数を得たいと思っています.この中で、ゾウ演算子は何をしましたか?我々は、正則的に一致する文は一度しか使わなかったが、一致が発生したかどうか、すなわちif制御文を検出し、分子を抽出する2つの場所で機能した.同様にpython 3を用いる.8前の文でこの文を書きます.
上記の例と同様に、海象演算子は私たちのために中間賦値のステップを省いて、コードをもっときれいにしました.
3
次に、ドキュメントには2つの例があります.まず、whileループ制御ですか、それとも付与の手順を省略しますか.
背景:コードは1つのファイルを読み取って、空で操作を実行しないで、同様に海象演算子がないことを見て、私達はどのように書きます:
同様に付与が一気に行われるので、海象演算子の役割は、計算文の結果を変数に付与し、変数をコードブロックで運用できることにあると思います.
4
次は最後の例です.
背景はリストの導出式で、フィルタ条件に合致する値を計算する必要があります.これは少し簡単に書くことができ、より透き通っています.
このコードを書き換えるには、最も簡潔な方法があります.
f(x)が2回実行することが見られるので、これは海象演算子の使い方を見ることができるだろう、すなわち流れを簡略化し、演算速度を向上させる.
PS:最近Goを勉強していますが、Goの中にはこれがあります.それは付与文を簡略化するために使われています.
ps:3.8の新しいプロパティWebサイトです.https://docs.python.org/3/whatsnew/3.8.html
公式サイト紹介:Assignment expressions(付与式)
There is new syntax := that assigns values to variables as part of a larger expression. It is affectionately known as “the walrus operator” due to its resemblance to the eyes and tusks of a walrus.
私达はこの新しい1种の文法を开発して、それは1つの强大な表现で、表现の一部を変数に与えることができて、海象の目と象牙に似ているため、海象の操縦者になります(雷の感じをコントロールします(~-^).少しぼんやりしているように聞こえますが、私の翻訳のレベルが足りないのかもしれません.
説明の後、公式サイトはいくつかの例をあげました.
1
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
この例では、海象式を用いることでlen()メソッドを2回実行することを回避し、実行速度を向上させることを強調する.
もし海象演算子がない場合、私たちはどのようにこのコードを書きますか?試してみましょう
if len(a) > 10:
print(f"List is to long({len(a)} elements, expected <= 10)")
あるいは、lenメソッドを2回使用することを避け、中間変数に値を割り当てるステップを1回以上加えた.
n = len(a)
if n > 10:
print(f"List is to long({n} elements, expected <= 10)")
一つの利点はここにあると思います.中間変数を割り当てるステップを省くことができます.
2
次に、ドキュメントでは、海象演算子の正則への応用について2つ目の例を示します.
discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):
discount = float(mo.group(1)) / 100.0
背景はこのようにすべきで、コードは1段のadvertisementのテキストの中から、割引のパーセントを得て、それから除算によってパーセント数を得たいと思っています.この中で、ゾウ演算子は何をしましたか?我々は、正則的に一致する文は一度しか使わなかったが、一致が発生したかどうか、すなわちif制御文を検出し、分子を抽出する2つの場所で機能した.同様にpython 3を用いる.8前の文でこの文を書きます.
discount = 0.0
mo = re.search(r'(\d+)% discount', advertisement)
if mo:
discount = float(mo.group(1)) / 100.0
上記の例と同様に、海象演算子は私たちのために中間賦値のステップを省いて、コードをもっときれいにしました.
3
次に、ドキュメントには2つの例があります.まず、whileループ制御ですか、それとも付与の手順を省略しますか.
# Loop over fixed length blocks
while (block := f.read(256)) != '':
process(block)
背景:コードは1つのファイルを読み取って、空で操作を実行しないで、同様に海象演算子がないことを見て、私達はどのように書きます:
while 1:
block = f.read(256)
if block != '':
process(block)
else:
break
同様に付与が一気に行われるので、海象演算子の役割は、計算文の結果を変数に付与し、変数をコードブロックで運用できることにあると思います.
4
次は最後の例です.
[clean_name.title() for name in names if (clean_name := normalize('NFC', name)) in allowed_names]
背景はリストの導出式で、フィルタ条件に合致する値を計算する必要があります.これは少し簡単に書くことができ、より透き通っています.
[o.title() for i in names if o:=f(i) in allowed_names]
# : clean_name normalize('NFC', name)
:
[y for x in names if (y := f(x))]
このコードを書き換えるには、最も簡潔な方法があります.
[f(x) for x in names if f(x)]
f(x)が2回実行することが見られるので、これは海象演算子の使い方を見ることができるだろう、すなわち流れを簡略化し、演算速度を向上させる.
PS:最近Goを勉強していますが、Goの中にはこれがあります.それは付与文を簡略化するために使われています.
Go , var , var , := 。
btw: Go .