5

Pythonスクリプトを書いていますが、コンソールに1行印刷する必要があります。十分に単純ですが、受け入れられている方法が関数に出力することであるかどうかを思い出せません(または決定できません)。たとえば、次のようになります。

def exclaim(a):
    print (a + '!')

または、次のような文字列を返すようにします。

def exclaim(a):
    return (a + '!')

次に、メインスクリプトで印刷します。どちらの方法でも議論できます。これを行うための一般的に受け入れられている方法はありますか、それとも好み次第ですか?


編集:明確にするために、これは私が使用している関数ではありません。ここにコードを投稿するのは気が進まないので、これらの関数を単純化しすぎた例として作成しました。

4

7 に答える 7

5

通常、関数はその出力を生成して返し、呼び出し元にそれをどうするかを決定させる必要があります。

結果を関数に直接出力する場合、関数を再利用して他のことを行うことは困難です。また、戻り値をテストするだけでなく、stdoutをインターセプトする必要があるため、テストすることも困難です。

ただし、この些細な例では、関数を再利用またはテストする必要はほとんどなく、関数をまったく持つ必要さえないようです。

于 2012-06-20T20:13:29.267 に答える
2

Pythonについて私が最も感謝していることの1つは、関心の分離を適切に促進することです。タスクをアトミックコンポーネントに分割する際の摩擦はほとんどありません。

値の計算と値の表示は2つの異なるものであり、これらを混在させないでください。

于 2012-06-20T20:30:16.223 に答える
1

覚えておくべきことの1つは、それを印刷すると関数は何も返さないので、書きたい行を使用する予定がある場合は、それを返す必要があるということです。

于 2012-06-20T20:17:21.410 に答える
1

関数を再利用できないことが確実で、コードの読み取り可能性を高めるためだけにその関数を作成した場合は、関数内で関数を印刷することができます。

それ以外の場合、後で何らかの方法で再利用できる方法がある場合は、代わりに値を返す必要があります。関数の目的の1つは再利用であるため、2番目のアプローチが推奨されます。

実際のオーバーヘッドはありません。

于 2012-06-20T20:23:00.200 に答える
0

私の意見では、関数は値を返す必要があります。

于 2012-06-20T20:15:26.500 に答える
0

私はいつも両方の方法を混ぜていますが、私はそれが次のように要約できると思います:

  • 関数全体の唯一の目的が端末に出力される(ユーザーへのメッセージを印刷する)場合、関数は印刷する必要があります。オプションで、エラーステータスまたはブール値として、ただし副次的なステップとして、いくつかの戻り値を使用できます。通常、印刷された文字列/メッセージは、ユーザーがメッセージを受信し、消費された文字列変数をガベージコレクションできるため、プログラムフロー内で他の用途はありません。

  • 関数が実際に何かを実行し、実際の値を返し(この値が文字列であっても)、関数を呼び出してその結果を別のステートメントに出力するよりも、端末でその値を確認したい場合。デバッグの場合は、そのprintステートメントを削除またはコメントするだけですが、関数は引き続きサイレントに実行されます。比較のために、printステートメントが関数内にある場合は、関数自体を変更する必要があります。

最後の考慮事項として、両方のアプローチはある程度同等ですが、コードを読む人にとっては(しばらくしてからでも)、読みやすさの観点から、コードの意図を把握するのに役立ちます。

お役に立てれば

于 2012-06-20T20:24:33.170 に答える
0

関数が値を計算してすぐに出力する場合、最終的には別の場所または別の方法で値を表示または使用したいと思うことがよくあります。

結果をファイルに書き込んだり、Webページの一部として送信したり、他の関数の部分的な値として使用したり、並べ替えやフィルター処理を変えて表示したりすることにします。

プロトタイプを作成するとき、または関数が非常に単純な場合は、関数に計算値をすぐに出力させるのは問題ありません...しかし遅かれ早かれ、プログラムがより大きく、より価値のあるものに成長した場合は、その単純なものを変換する必要があります。印刷するだけです!」より純粋なcompute-and-return関数に関数化します。

だから私は、結果を返し、後で印刷するコーディングスタイルから始めようとしています。きれいに見え、一般的に後で時間を節約できます。しかし、すべての文体と同様に、それは判断の呼びかけであり、YMMVです。

于 2012-06-20T20:35:01.357 に答える