7

モジュールコード全体に別のインデントレベルを追加せずに、以下のモジュールコードを記述する方法があるかどうかを知りたいです。

# module code
if not condition:
    # rest of the module code (big)

私はこのようなものを探しています:

# module code
if condition:
    # here I need something like a `return`
# rest of the module code (big)

例外をスローしたくないことに注意してください。インポートは正常に渡されるはずです。

4

3 に答える 3

5

それに対する解決策はわかりませんが、すべてのコードを内部モジュールに入れて、条件が満たされない場合はそれをインポートできると思います。

于 2011-10-13T14:33:14.167 に答える
2

私はこれを行う方法を知りません。私が想像できる唯一のことはうまくいくだろうがreturn、それは関数の中にある必要がある。

于 2011-10-13T13:21:14.203 に答える
-1

あなたのより高いレベルの目標が何であるかを知らずに言うのは非常に難しいです。(たとえば、条件は何ですか?なぜそれが重要なのですか?ここでXY問題が発生していないことを確信していますか?全体的な目標を教えていただけませんか?)また、知らずに言うのは本当に難しいです。モジュールがどのように呼び出されるか。(コマンドラインからのスクリプトとして?別のモジュールによってインポートされることによって?)そして、(a)インデントを避けようとしている理由を知るのに大いに役立ちます(第二次世界大戦は終わり、スペースを配給する必要はありません)または、もっと親切に言えば、Pythonは構文機能としてインデントを使用する言語であるため、「この構文機能を使用できない」と言うと、多くの人が奇妙な制約になります。それは、if-thenをあきらめるようなものです。テスト:理論的には、その制約を回避できる可能性があります。

現状では、「条件A、B、Cが与えられた場合、Xをどのように実行すればよいですか?」と尋ねるだけです。質問します。Xを実行する理由、条件A、B、およびCが存在する理由、あるいはそれらが存在し、回避できないことを100%確信しているかどうかさえも示しません。

あなたが本当に言っていることが「関数を書いている間に{TAB}を40回押したくない」であるなら、本当の問題はあなたがより良いテキストエディタを必要とするということです。あなたが本当に言っていることが「私はたまたまインデントが審美的に不快であると思う」であるならば、あなたは(a)議論の反対側が何であるかについて考える必要があります。つまり、Pythonが構文としてインデントを使用する理由が便利です。(b)この点に関するあなた自身の美的好みが、(a)で思いついた理由よりも重要であるかどうか。(c)これらのことを考えると、Pythonが、自分の大規模な目標を達成するために個人的に使用するのに適したツールであるかどうか。(構文機能としてインデントを好まないのは問題ありません。しかし、これはPythonにとって非常に基本的なことであるため、それを除外する程度に哲学的に反対していることは、Pythonがプログラミング目標を達成するための理想的な言語ではないことを強く示しています。 2つの異なる状況下で実行する必要のあるコードを2つのモジュールに分解することでメリットが得られる場合は、リファクタリングすることでメリットが得られます。あなたが言っているのが、リファクタリングが完全に不可能になるスパゲッティコードを持っているということなら、モジュールのインポートを中止しようとする前に、それが実際に対処すべき最初の問題です。本当に言っているのは、2つの異なる状況下で実行する必要のあるコードを2つのモジュールにファクタリングすることでメリットが得られ、次にリファクタリングすることでメリットが得られるということです。あなたが言っているのが、リファクタリングが完全に不可能になるスパゲッティコードを持っているということなら、モジュールのインポートを中止しようとする前に、それが実際に対処すべき最初の問題です。本当に言っているのは、2つの異なる状況下で実行する必要のあるコードを2つのモジュールにファクタリングすることでメリットが得られ、次にリファクタリングすることでメリットが得られるということです。あなたが言っているのが、リファクタリングが完全に不可能になるスパゲッティコードを持っているということなら、モジュールのインポートを中止しようとする前に、それが実際に対処すべき最初の問題です。

于 2016-07-25T08:54:03.090 に答える