假定db1, db2 是shelve对象
if switch_d1_and_db2: func(db1, db2) else: func(db2, db1)
怎么才能改写成:
if switch_d1_and_db2: db1, db2 = db2, db1 # 错误写法 func(db1, db2)
db1, db2 = db2, db1 肯定是不行的,怎么改写呢
db1, db2 = db2, db1
学习是最好的投资!
こんにちは、この問題をしばらく研究した結果、次の結論に達しました:
それは難しすぎて、使用したい構文がやろうとしていることと一致しません
本来の方法で問題ないと思います
あなたが定義した交換を実現したい場合は、あまり美しくない代替案があります。
上記 3 つのポイントについて説明します。
最初のポイントとして必要なものは次のとおりです。
db1、db2がどのようなオブジェクトであっても、この交換の意味は
db1
db2
変数 db1 が db2 によって最初に参照されたオブジェクトを参照し、変数 db2 が最初に db1 によって参照されたオブジェクトを参照するようにします。
しかし、あなたがやりたいことは次のとおりです:
db1 ファイルと db2 ファイルの内容を交換します
よく考えてください。これら 2 つは同じではありません。別の言い方をすると、db1, db2 = db2, db1 は変数によって参照されるものを交換するだけです (変数名はデータベースのファイル名と等しくありません)。 , しかし、各ファイルの名前 コンテンツはまだ交換されていません。
したがって、この構文を使用して交換することは、達成したい効果と一致しません。
2 番目の点については、当然のことなので詳しくは説明しませんが、気に入らないかもしれません。
3 番目のポイントは、あまり美しくない代替手段を提供したことです。それは、shelf のプロキシ クラス ShelfProxy を単純に定義することです。このクラスは、Shelf クラスの動作をシミュレートしようとします (インターフェイスのみが似ています)。 )、オーバーロードされた演算子 ^ は交換として定義されます:
shelf
ShelfProxy
Shelf
^
私は ^ を 内のコンテンツ の交換として定義します。^ を選択した理由は、これより適切なシンボルが思い浮かばないからです。一般的に、オーバーロードは行われません。このようにすると、他のクラスのインスタンスが返されるため、それほど簡単ではありませんが、便宜上、またシンプルなインターフェイスが必要なため、これを作成しました。
次に、いくつかのテスト関数を定義します。
テストコード:
結果:
ほとんどの場合、Shelf と同じインターフェースを使用して ShelfProxy を操作でき、全体的な効果も似ていますが、ここまで書いた後は最初からその方法を使用した方が簡単だと思いませんか?XD
私が回答した質問: Python-QA
こんにちは、この問題をしばらく研究した結果、次の結論に達しました:
それは難しすぎて、使用したい構文がやろうとしていることと一致しません
本来の方法で問題ないと思います
あなたが定義した交換を実現したい場合は、あまり美しくない代替案があります。
上記 3 つのポイントについて説明します。
最初のポイントとして必要なものは次のとおりです。
リーリー
ですdb1
、db2
がどのようなオブジェクトであっても、この交換の意味はしかし、あなたがやりたいことは次のとおりです:
よく考えてください。これら 2 つは同じではありません。別の言い方をすると、
db1, db2 = db2, db1
は変数によって参照されるものを交換するだけです (変数名はデータベースのファイル名と等しくありません)。 , しかし、各ファイルの名前 コンテンツはまだ交換されていません。したがって、この構文を使用して交換することは、達成したい効果と一致しません。
2 番目の点については、当然のことなので詳しくは説明しませんが、気に入らないかもしれません。
3 番目のポイントは、あまり美しくない代替手段を提供したことです。それは、
リーリーshelf
のプロキシ クラスShelfProxy
を単純に定義することです。このクラスは、Shelf
クラスの動作をシミュレートしようとします (インターフェイスのみが似ています)。 )、オーバーロードされた演算子^
は交換として定義されます:私は
^
を 内のコンテンツ の交換として定義します。^
を選択した理由は、これより適切なシンボルが思い浮かばないからです。一般的に、オーバーロードは行われません。このようにすると、他のクラスのインスタンスが返されるため、それほど簡単ではありませんが、便宜上、またシンプルなインターフェイスが必要なため、これを作成しました。次に、いくつかのテスト関数を定義します。
リーリーテストコード:
リーリー結果:
リーリー結論
ほとんどの場合、
Shelf
と同じインターフェースを使用してShelfProxy
を操作でき、全体的な効果も似ていますが、ここまで書いた後は最初からその方法を使用した方が簡単だと思いませんか?XD私が回答した質問: Python-QA