学習目標
セイウチの演算子の構文は次のとおりです。
これは、式を評価しながら変数に値を割り当てることができることを意味します。この演算子は、同様の目とセイウチとの象牙にちなんで名付けられました。
<code>variable := expression</code>
以下は、セイウチの演算子がどのように機能するかを示す基本的な例です。
PythonのWalrusオペレーター:構文ルール
<code># 使用 Walrus 运算符 if (n := len(numbers)) > 0: print(f"Length of numbers: {n}")</code>
文法ルール
基本的な構文
:セイウチのオペレーターの基本的な構文は次のとおりです。<code>variable := expression</code>
:3成分演算子やネストされた式など、より複雑な式にセイウチの演算子を埋め込む場合、括弧を使用して正しい評価の順序を確保する必要があります。たとえば、
変数の命名制限:walrusオペレーターに割り当てられた変数は、属性またはサブスクリプトを直接使用することはできません。たとえば、以下は無効です:
<code>result = (x := some_function()) if x > 10 else "Too low"</code>
<code>my_object.attr := value # 无效</code>
<code>variable := expression</code>
シンプルで読み取り可能なコード
この例では、この例では、Walrus演算子は、課題とチェックを連続して実行することにより、よりクリーンなアプローチを可能にします。
<code># 使用 Walrus 运算符 if (n := len(numbers)) > 0: print(f"Length of numbers: {n}")</code>
パフォーマンスの改善
ここで、セイウチの演算子を使用する場合、FUNC(x)は反復ごとに1回のみと呼ばれ、効率が大幅に向上します。
<code>variable := expression</code>
単純化されたリストの理解
この場合、遅い(num)は、反復あたりの数値の要素ごとに1回だけ評価されるため、コードはより効率的であるだけでなく、従来のループよりも読みやすくなります。
<code>result = (x := some_function()) if x > 10 else "Too low"</code>
拡張ループ構造
この使用法により、入力値をチェックする前に追加の入力行を読み取る必要がなくなり、ループがより簡単になります。
<code>my_object.attr := value # 无效</code>
重複する関数呼び出しを避けます
多くの場合、特に計算上の高価な関数やイテレーターを扱う場合、セイウチの演算子は、パフォーマンスを低下させる可能性のある重複コールを回避するのに役立ちます。これにより、hoping_function(x)が2回ではなく、反復ごとに1回のみ実行されることが保証されます。
<code>walrus := True # 无效</code>
walrus operator(:=)は、表現の割り当てを許可するPythonの一般的なツールです。このオペレーターの非常に有用なユースケースと、その機能とユーティリティを説明するためのいくつかの例とともに、以下に次になります。
セイウチの演算子は、繰り返しの割り当てを必要とするループで特に役立ち、条件を確認します。
セイウチのオペレーターを使用しないでください:セイウチのオペレーターを使用してください:
<code>(walrus := True) # 有效,但不推荐用于简单的赋值</code>
理由:
<code># 不使用 Walrus 运算符 value = get_data() if value: process(value) # 使用 Walrus 运算符 if (value := get_data()): process(value)</code>
リストの包括的なコードを書くのに最適な方法ですが、値を計算して再利用する必要がある場合があります。セリュースオペレーターはこれを簡単にします。
セイウチのオペレーターを使用しないでください:
<code>variable := expression</code>
セイウチのオペレーターを使用してください:
<code># 使用 Walrus 运算符 if (n := len(numbers)) > 0: print(f"Length of numbers: {n}")</code>
理由:
セイウチの演算子は、最初に計算する必要がある値に条件が依存する場合に最適です。
セイウチのオペレーターを使用しないでください:
<code>variable := expression</code>
セイウチのオペレーターを使用してください:
<code>result = (x := some_function()) if x > 10 else "Too low"</code>
理由:
セイウチのオペレーターは、ファイルやストリームの読み取りなど、反復中にデータを処理するのに役立ちます。
セイウチのオペレーターを使用しないでください:
<code>my_object.attr := value # 无效</code>
セイウチのオペレーターを使用してください:
<code>walrus := True # 无效</code>
理由:
セイウチのオペレーターは、条件の値を計算する必要がある場合に冗長性を減らすことができますが、後で再利用することもできます。
セイウチのオペレーターを使用しないでください:
<code>(walrus := True) # 有效,但不推荐用于简单的赋值</code>
セイウチのオペレーターを使用してください:
<code># 不使用 Walrus 运算符 value = get_data() if value: process(value) # 使用 Walrus 运算符 if (value := get_data()): process(value)</code>
理由:
セイウチの演算子は、特に機能プログラミングモードで、フィルタリング中に変換を実行するために使用できます。
セイウチのオペレーターを使用しないでください:
<code># 不使用 Walrus 运算符(函数被多次调用) results = [func(x) for x in data if func(x) > threshold] # 使用 Walrus 运算符(函数只调用一次) results = [y for x in data if (y := func(x)) > threshold]</code>
セイウチのオペレーターを使用してください:
<code>numbers = [7, 6, 1, 4, 1, 8, 0, 6] results = [y for num in numbers if (y := slow(num)) > 0]</code>
理由:
セイウチの演算子は、データの充電の読み取りを必要とする操作に特に役立ちます。
セイウチのオペレーターを使用しないでください:
<code>while (line := input("Enter something (or 'quit' to exit): ")) != "quit": print(f"You entered: {line}")</code>
セイウチのオペレーターを使用してください:
<code># 多次调用昂贵的函数 result = [expensive_function(x) for x in range(10) if expensive_function(x) > 5] # 使用 Walrus 运算符 result = [y for x in range(10) if (y := expensive_function(x)) > 5]</code>
理由:
以下に、セイウチのオペレーターのベストプラクティスをいくつかご覧ください:
aは、Python 3.8で導入されたため、以前のバージョンでは利用できませんでした。
Q3。aは明確さを改善することができますが、特にその機能に精通していない人にとっては、混乱したコード構造につながる可能性があります。
以上がPython Walrusオペレーターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。