1

は、「コンピュータ・サイエンティストのように考える方法Pythonは考える」:"機能が終了する前に満足する必要がある要件"です。 postconditionの正しい定義は、Pythonで?</em>、著者は定義として<em>事後条件</em>:<em>で

、それが終了する前に機能が満たすべき要件。

また、彼は述べている:

は逆に、関数の最後の条件は、事後条件です。 事後条件には、意図した機能の影響( 描画線セグメントなど)とその他の副作用(他の変更を行うタートルまたは の移動など)が含まれます。

だから、我々は肯定を返す(つまりは、それがために必要とされる)しなければならないこと、それの 事後条件を期待されていない、 nはと呼ばれる必要なパラメータを持ってい 階乗と呼ばれる機能を持っていることを前提とし の数値の積を表す整数1から n階数が終了した後、この要件は満たされませんか?

この定義は正しいですか?

「終了後に関数が満たすべき要件」という後置条件と定義しますか?そうでしょうか?

メモ:私は特にプログラミング、一般的にはPythonの初心者です。

+0

1つのパラメータをとり、それを返す関数* identity *について考えてみましょう。 –

答えて

1

事後条件は「関数が終了した瞬間に真でなければならない要件」です。つまり、関数が終了して何も起こらなかった場合、関数の事後条件は真でなければなりません。

あなたの本の中で定義は、実際にこのとやや矛盾している:それが終了する前に事後条件を関数によって満足されている場合は、および機能は、その後の進路、事後条件を偽条件をレンダリングすることは何もされません関数が終了する瞬間に真となります。

あなたの定義はこれと一致するです。関数の終了直後には、その事後条件は真でなければなりません。

ここでの主な問題は、「満足」という単語の定義だと思います。 「条件を満たす」とは、「その条件を真にする」(あなたの本が使用する定義のように見える)ことを意味するならば、関数が実行されている間、ある時点で事後条件が成立しなければならない関数の実行が終了した時点で真でなければなりません。 「条件を満たす」ことを意味するために「満足」すると(あなたがその言葉をどのように使用しているかのように思われる)、あなたの定義は意味をなさない - 関数が終了した直後の事後条件は真でなければならない。

セマンティクス!何が価値があるために

+0

ありがとう、ペドロ。 「その条件を真とする」と「条件を真とする」の違いは何ですか? –

+1

「条件を真にする」とは、その条件が以前は偽であったことを意味し、あるアクションはそれが真であることに変わります。この「満足」の使用は、条件の真理値を変更するアクションを表します。 「条件が真である」とは、条件が既に満たされていることを意味し、アクションは関係しません。 –

1

、関数が終了する前に、Pythonでの実行のその特定の枝の上の機能に起こることができる何かが起こる必要があります。単純なケースで

In [6]: import dis 

In [7]: def fun(): 
    ...:  return 42 
    ...: 

In [8]: dis.dis(fun) 
    2   0 LOAD_CONST    1 (42) 
       2 RETURN_VALUE 

を、ちょうど42、定数がロードされ。

しかし、returnの中にtryのようにもう少し複雑なものはありますか?

In [9]: def fun_with_exceptions(): 
    ...:  try: 
    ...:   return 42 
    ...:  finally: 
    ...:   print('Returning') 
    ...: 

判明:

In [11]: dis.dis(fun_with_exceptions) 
    2   0 SETUP_FINALLY   4 (to 6) 

    3   2 LOAD_CONST    1 (42) 
       4 RETURN_VALUE 

    5  >> 6 LOAD_GLOBAL    0 (print) 
       8 LOAD_CONST    2 ('Returning') 
      10 CALL_FUNCTION   1 
      12 POP_TOP 
      14 END_FINALLY 
      16 LOAD_CONST    0 (None) 
      18 RETURN_VALUE 

をすべてのものはまだ機能が実際に返す前に実行ようやくに - そう

として事後条件の定義すべき要件機能が終了する前にその機能によって満足される。

まだ完全に有効です。

0

「関数の前には、が終了する」という定義が定義されています。正しい。

関数create_logger(file_name)は、文字列パラメータとfile_nameをとり、与えられたfile_nameのファイルストリームを返します。これはログメッセージの書き込みに使用できます。

この場合、ポスト条件は、返されるオブジェクトが書き込み可能なファイルストリーム(関数の主な目的)であることです。
また、同じ名前の以前のファイル(ハウスキーピング/クリーンアップアクティビティ)をクリアすることもあります。
新しく作成したファイルに十分なスペースやパーミッションがあります(健全性チェック)。
ポストコンディションは、主目的と健全性チェックの両方で作成できます。これは関数の実行中および戻り前のある時点で真となります。

ただし、関数が返ってもこれらの条件がTrueのままである必要はありません。したがって、終了後に機能によって満たされる必要がある要件。間違っています。
たとえば、関数が返された後のある時点で、ディスクがいっぱいになり、返されたファイルストリームオブジェクトが書き込み可能にならないことがあります。

関連する問題