4

金曜日、私は次の構造について誰かと話し合いました。

class C(....

c = C()
d = C()
...

(c if some_boolean else d).some_function_of_class_C()

この種のifステートメントは受け入れ可能/推奨されていますか?

問題は、私が一緒に仕事をしている多くの人がCの経験はあるが、Pythonの経験はそれほど多くなく、そのようなステートメントに慣れていないことです(リスト内包表記と同じです)。ただし、PythonはCではないので、Python言語の利点を利用する必要があると思います。か否か?

(ところで、私は通常の関数名と変数名を使用しますが、サンプルを保持するためにこの例のためだけです。また、f()だけでなく、いくつかの関数(f()。g()などの関数も呼び出します。その場合、woudは完全に繰り返す必要があります。

4

3 に答える 3

8

コードに技術的な問題はありませんが、そのようなコードを見るのは少し奇妙で驚くべきことです。

ステートメントを 2 つの別個のステートメントに分割すると、読みやすくなります。

c = c1 if some_boolean else c2
c.some_function_of_class_C()

あなたが選択したひどい変数名は、依然として見栄えが悪くなります。ただし、変数名を変更すると、読みやすさも向上します。

vehicle = plane if distance > 1000 else car
vehicle.travel()

私の意見では、それはあなたが最初に提案したものよりもはるかに読みやすく、非常に小さな変更しか必要としませんでした.

于 2012-08-18T16:57:08.280 に答える
3

これは構文的にも意味的にも有効ですが、確かに Pythonic ではありません。代わりに Strategy パターンの使用を検討してください。

于 2012-08-18T16:56:57.530 に答える
1

ある言語でコードを書き、別の言語のスタイルと制限を使用することは、長期的には決して良い考えではありません。Python コードは常にpythonicである必要があります。

とはいえ、コードを読んでいる人が Python 構文を理解しているか、少なくとも残りをググるのに十分であると仮定して、コードが読み取り可能であることを確認してください。

于 2012-08-18T16:59:04.067 に答える