ディレクトリ
私は、内部関数を実行する方法である行が実行されているかを知りたい、実行されていない、とローカル変数の値が何であるあなたが知っている必要があり、デバッガでジュニアパートナー、問題を信じますか?ほとんどの人は、デバッグするためのパラメータか疑問に思うところで印刷する印刷機能を使用することを選択します。
印刷の使用はまた、法と考え、時にはそれが多くの問題であるので、より多くの場所で、それぞれの場所を印刷するために追加されますかしられているが。
githubのは、アーティファクトを開く--- PySnooperは、印刷を許可し、同じ操作を実行し、ちょうど慎重に正しいプリントラインを作成するのではなく、関心の機能に装飾的な行を追加します。実行すると、ときに、ローカル変数を変更する際に詳細なログは、実行中の行が含まれる関数になります。
1.印刷を使用する従来の方法は、デバッグ
コンピュータプログラミングで印刷し、それが最も頻繁に使用される操作の一つとしてみなされるべきです。それはC言語の数のprintf関数、またはC ++、あるいはPythonのプリントであるかどうか、コンソールに出力を印刷することです。
各エントリには、小さな周りのパートナーをプログラミングするが、敷居は、Pythonで文字列の「Hello World」の出力は、非常に簡単な言葉であるが、例えば:
print('Hello World')
のみだけで出力を印刷する印刷機能を表示するには、ジュニアパートナーの必要性を開始していない、大規模な牛での作業の経験は一貫して予想される出力は、間接的にプログラムがあるかどうかを判断するかどうかを判断するために、中間変数から定期的なプリントを持っていますエラー声明。
印刷のデバッグを使用する利点は、簡単に使用することに、非常に簡単な、しかし、欠点も明らかです。
- あなたが欲しい情報をより印刷する場合は、文のプリントロット行を記述する必要があります。
- 試運転の後、多くの場合も一つ一つ、これらのステートメントを削除する必要があります。これは退屈なプロセスです。
- 要するに、印刷のデバッグを使用しての欠点は、あまり効率的です。
最も一般的な方法を表示するには、印刷パラメータを使用する場合は、次の、ショーは、私たちはコードをデバッグ:
def removeDuplicates(nums):
"""
:type nums: List[int]
:rtype: int
"""
flag = 0
i = 1
while i < len(nums): # len(nums)=4
if nums[i] == nums[i - 1]: # 相邻两个相等
flag += 1
i += 1
print("flag=",flag)
print("i=", i)
if flag >= 2:
del nums[i - 1] # 如果flag大于等于2,就从列表num是中删除第i-1个元素
i -= 1
print("i=",i)
print("nums=",nums)
else:
print("else")
i += 1
flag = 0
return len(nums)
nums = [1, 1, 1, 2]
print(removeDuplicates(nums))
結果は以下のように、出力を印刷します:
2.pysnooperアーティファクトの印刷方法
PySnooper - 再びデバッグするための印刷を使用しないでください
この場合、我々は、直接コード印刷部は、上記のように、以下、増加pysnooper部、そうでなければ変化しないコメント
import pysnooper
@pysnooper.snoop()
def removeDuplicates(nums):
flag = 0
i = 1
while i < len(nums): # len(nums)=4
if nums[i] == nums[i - 1]: # 相邻两个相等
flag += 1
i += 1
if flag >= 2:
del nums[i - 1] # 如果flag大于等于2,就从列表num是中删除第i-1个元素
i -= 1
else:
i += 1
flag = 0
return len(nums)
nums = [1, 1, 1, 2]
print(removeDuplicates(nums))
次のように印刷結果は以下のとおりです。
- レッドボックス部、デバッグまでの時間で、どこの行を実行します
- 青、緑、黄色のボックスは、動作中のパラメータの値であり、
- 赤色が実行するコードの行線の右側のフレームであり、実行
上記の実行、また、方法を用いて、自己矛盾の印刷におけるパラメータ値の内容をより直感的になりpysnooper
あなたは簡単にアクセスstderrのない場合は、出力をファイルにリダイレクトすることができます。
import pysnooper
#@pysnooper.snoop()
@pysnooper.snoop('file.log')
次のように続いて、レビューfile.logは、読み取ります。
最後に、送信設備は、またエラー非常に単純ではありません
pip install pysnooper
もっとgithubのビューに直接移動することができ、導入pysnooperについて、今12.6Kはそれを賞賛:https://github.com/cool-RR/PySnooper
リファレンスセクションます。https://slxiao.github.io/2019/06/01/print/
ホワイトCV:いいえ公共のCV(コンピュータビジョン)、AI(人工知能)技術関連分野、C ++の周りの記事の主な内容、Pythonはプログラミング技術、機械学習(ML)を集中するように設計、など(DL)、OpenCVの画像処理を、学習の深さ技術、技術的なポイント、勉強や仕事レコードの一般的な操作の深さを探る、問題は仕事のアシスタントにあなたを学びます。唯一の技術、専門的な知識の共有プラットフォームのCVフィールドに関わります。
----------------