1行のコードでデバッグと印刷を排除し、アルゴリズムの学習を支援

1行のコードでデバッグと印刷を排除し、アルゴリズムの学習を支援

[[442725]]

この記事はWeChatの公開アカウント「Python Technology」から転載したもので、著者はPai Senjiangです。この記事を転載する場合は、Python Technology Public Account にお問い合わせください。

アルゴリズムを書くときは、常に各行の各変数を 1 つずつデバッグする必要があり、場合によっては複数の print を記述する必要があります。アルゴリズムの問​​題を理解するには長い時間がかかります。 pysnooper モジュールは、操作中に変数の値を出力できます。

モジュールのインストール

  1. pip3 pysnooper をインストールする

簡単な例

簡単な例として、簡単な演繹アルゴリズムの問​​題を示します。

  1. pysnooper をインポートする
  2.  
  3. @pysnooper.snoop()
  4. def longestCommonPrefix(文字列):
  5. 解像度 = ''  
  6. i をzip(*strs)格納する場合:
  7. 印刷(i)
  8. len( set (i)) == 1の場合:
  9. 解像度 += i[0]
  10. それ以外 
  11. 壊す
  12. 戻り
  13.   
  14. __name__ == 'main'の場合:
  15. longestCommonPrefix([ "花" , "流れ" , "飛行" ])

結果:

  1. 3:38:25.863579 呼び出し 4 def longestCommonPrefix(strs):
  2. 23:38:25.864474 行 5 res = ''  
  3. 新しい変数:.......res = ''  
  4. 23:38:25.864474 6行i in zip(*strs):
  5. 新しい変数:.......i = ( 'f' , 'f' , 'f' )
  6. 23:38:25.865479 7行目 print(i)
  7. ( 'f' 'f' 'f' )
  8. 23:38:25.866471 8行目 if len( set (i))==1:
  9. 23:38:25.866471 行9 res+=i[0]
  10. 変更された変数: .. res = 'f'  
  11. 23:38:25.866471 6行i in zip(*strs):
  12. 変更された変数: .. i = ( 'l' , 'l' , 'l' )
  13. 23:38:25.866471 行 7 print(i)
  14. ( 'l' 'l' 'l' )
  15. 23:38:25.867468 行8 if len( set (i))==1:
  16. 23:38:25.867468 9行目 res+=i[0]
  17. 変更された変数: .. res = 'fl'  
  18. 23:38:25.868476 6行i in zip(*strs):
  19. 変更された変数: .. i = ( 'o' , 'o' , 'i' )
  20. 23:38:25.868476 7行目 print(i)
  21. ( 'お' 'お' '私' )
  22. 23:38:25.869463 8行目 if len( set (i))==1:
  23. 23:38:25.869463 11行目 改行
  24. 23:38:25.869463 12行目戻り
  25. 23:38:25.869463 12返すresを返す
  26. 戻り値: .. 'fl'  
  27. 経過時間: 00:00:00.008201

pysnooper は、行番号、行の内容、変数の結果など、実行プログラム全体を記録していることがわかります。このアルゴリズムの実際の状況を簡単に理解できます。また、コードをデバッグするために debug や print を使用する必要もありません。時間と労力を節約できます。メソッドの上に @pysnooper.snoop() という行を追加するだけです。

複雑な使用

pysnooperには複数のパラメータが含まれています。見てみましょう

出力

出力はデフォルトではコンソールに出力され、設定後はファイルに出力されます。サーバーで実行する場合、特定の時間にコードの問題が発生した場合にエラーの場所を特定しやすいですが、そうでない場合は途方に暮れやすくなります。実際、私はこの問題に何度も悩まされ、そのたびに大量の髪の毛が抜け落ちました。

  1. @pysnooper.snoop( 'D:\pysnooper.log' )
  2. def longestCommonPrefix(文字列):

結果の例:

ウォッチとウォッチ_explode

watch は、追跡のために非ローカル変数を設定するために使用されます。watch_explode は、すべての設定された変数が監視されるのではなく、未設定の変数のみが監視されることを意味します。これは、watch とまったく逆です。

  1. インデックス= 1
  2. @pysnooper.snoop(ウォッチ=( 'インデックス' ))
  3. def longestCommonPrefix(文字列):

結果例

監視パラメータが追加されていません

  1. 開始変数: .. strs = [ 'flower' , 'flow' , 'flight' ]
  2. 00:12:33.715367 呼び出し 5 def longestCommonPrefix(strs):
  3. 00:12:33.717324 行 7 res = ''  
  4. 新しい変数:.......res = ''  

ウォッチパラメータを追加すると、Starting var:.. indexになります。

  1. 開始変数: .. strs = [ 'flower' , 'flow' , 'flight' ]
  2. 開始変数: ..インデックス= 1
  3. 00:10:35.151036 呼び出し 5 def longestCommonPrefix(strs):
  4. 00:10:35.151288 行 7 res = ''  
  5. 新しい変数:.......res = ''  

深さ

depthは関数の深さを監視します

  1. @pysnooper.snoop(深さ=2)
  2. def longestCommonPrefix(文字列):
  3. その他のメソッド()

結果例

  1. 開始変数: .. strs = [ 'flower' , 'flow' , 'flight' ]
  2. 00:20:54.059803 呼び出し 5 def longestCommonPrefix(strs):
  3. 00:20:54.059803 行 6 otherMethod()
  4. 00:20:54.060785 16 def otherMethod() を呼び出します:
  5. 00:20:54.060785 行 17 x = 1
  6. 新しい変数:....... x = 1
  7. 00:20:54.060785 18行目 x = x + 1
  8. 変更された変数: .. x = 2
  9. 00:20:54.060785 18 x = x + 1を返す
  10. 戻り値: .. なし
  11. 00:20:54.061782 行 7 res = ''  

監視結果では、呼び出された関数を監視すると、レコードにインデントが追加され、そのローカル変数と戻り値が印刷されることがわかります。

接頭辞

プレフィックス 出力コンテンツのプレフィックス

  1. @pysnooper.snoop(プレフィックス = '--------------' )
  2. def longestCommonPrefix(文字列):

結果例

  1. -------------開始変数: .. strs = ['flower', 'flow', 'flight']  
  2. -------------00:39:13.986741 呼び出し 5 def longestCommonPrefix(strs):  
  3. -------------00:39:13.987218 行 6 res = ''  

相対時間

relative_time コードが実行される時間

  1. @pysnooper.snoop(相対時間 = True )
  2. def longestCommonPrefix(文字列):

結果例

  1. 開始変数: .. strs = [ 'flower' , 'flow' , 'flight' ]
  2. 00:00:00.000000 呼び出し 5 def longestCommonPrefix(strs):
  3. 00:00:00.001998 6行目 res = ''  
  4. 新しい変数:.......res = ''  
  5. 00:00:00.001998 7行i in zip(*strs):

最大変数長

max_variable_length 出力変数と例外の最大長。デフォルトは 100 文字です。100 文字を超えると切り捨てられます。出力を切り捨てないようにするには、max_variable_length=None を設定します。

  1. @pysnooper.snoop(最大変数長=5)
  2. def longestCommonPrefix(文字列):

結果例

  1. 開始変数: .. strs = [...]
  2. 00:56:44.343639 呼び出し 5 def longestCommonPrefix(strs):
  3. 00:56:44.344696 6行目 res = ''  
  4. 新しい変数:.......res = ''  
  5. 00:56:44.344696 7行目for i in zip(*strs):
  6. 新しい変数:....... i = (...)

要約する

この記事では、pysnooper ツールの使い方を紹介します。pysnooper はデバッグと印刷を減らすだけでなく、アルゴリズムの問​​題を理解するのにも役立ちます。

<<:  IEEE年末AIレビュー:ネットユーザーがGPT-3に悪態をつくよう教える、DeepMindが再びロボットを作る

>>:  中国の教授が犯罪認識率97%の人工知能「検察官」を開発、現在テスト中

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

大手企業がどのように人工知能を活用し、実践しているのかご覧ください。

人工知能に関しては、人々は複雑な感情を抱くことが多い。映画ファンなら、ウィル・スミスが『アイ、ロボッ...

...

...

Java 開発者のための機械学習の事例

翻訳者 |陳俊レビュー | Chonglou昨年以来、 ChatGPTやBardなどの大規模言語モデ...

ああ、顔認識で同性愛を検出できるんですか?

[[236037]]顔認識は携帯電話のロックを解除したり逃亡者を捕まえたりできるだけでなく、あなた...

生体認証に関する最大の誤解は何ですか?

セキュリティ分野で広く使用されている技術の中で、生体認証技術のプライバシー問題が最も懸念されています...

競争相手に差をつけるための機械学習プロジェクトのアイデア 8 つ

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...

研究:AIが生成した顔は本物の顔よりも信頼性が高い

今週、米国科学アカデミー紀要に発表された新たな研究は、ディープフェイク技術がどれだけ進歩したかを示す...

...

北科不動産はグラフ技術の導入を推進し、不動産サービスエコシステムの好循環を推進しています。

【51CTO.comオリジナル記事】 [[286886]]最近、北京グローバル金融センターで北科不...

シャンダイノベーション研究所とソゴウ研究者:自然言語処理の応用

【TechWeb Report】6月26日、山大創新研究所検索テーマ研究所研究員の賈文傑氏と捜狗自然...

ロボットは人間に取って代わるでしょうか?

人工知能は現在、病気の診断、車の運転、言語の理解、さらにはチェスでトップクラスの人間プレイヤーに勝つ...

AIの未来はエッジにある

モノのインターネット (IoT) は、絶えず複製されるエンティティのネットワークのようなもので、これ...

...

人工知能研究は行き詰まりに陥っているかもしれない

[51CTO.com クイック翻訳]フィリップ・K・ディックの1968年の小説『アンドロイドは電気羊...