2016-04-14 10 views
0

これで私の髪を引き出します。私は一日中このようなコードを書いています。なぜ私がこのことをやっているのかわかりません。多分私は睡眠が必要です。可変スコープの問題(私だと思います)

マイコード:

gsamp  = 0  # good samples 
    zsamp  = 0  # zero samples 
    nsamp  = 0  # null samples 
    rtotal  = 0 
    rtotalltms = 0 
    pctltms  = 0.0 
    peakh  = 0 
    peakl  = 0 

    for sample in self.rawdata: 
     if "data" not in sample['data']: 
      nsamp += 1 
      continue 
     if not bool(sample['data']['data']): 
      nsamp += 1 
      continue 
     rtotal += sample['data']['value'] 
     gsamp += 1 
     # If I print gsamp here it shows it being correctly incremented 
     for entry in sample['data']['data']: 
      if int(entry['key']) <= thresh: 
       rtotalltms += entry['value'] 
      if gsamp == 1: 
       print "DEBUG gsamp=%d" % gsamp 
       peakh = int(entry['key']) 
       peakl = int(entry['key']) 
       continue 
      if int(entry['key'] > peakh): 
       peakh = int(entry['key']) 
       continue 
      if int(entry['key'] < peakl): 
       peakl = int(entry['key']) 
       continue 

私は今まで、デバッグラインは1時間に印刷されたことがわかります。しかし何らかの理由でgsampがローカルにスコープされているなどです。

私は30個のサンプルのデータセットでこのコードを実行すると、私はデバッグ行は、任意の助け= 1

おかげgsampで30回を印刷していることがわかります。

答えて

0

sample.rawdataをループするときに、gsampを先頭ループに増やしていますが、次に2番目のループsample['data']['data']を押します。これは、デバッグステートメントが印刷されるところです。あなたは、コードの残りの部分を削除した場合

、あなたは何が起こっているか見ることができます。

[...] 

gsamp += 1 
    # If I print gsamp here it shows it being correctly incremented 
    for entry in sample['data']['data']: 
     if int(entry['key']) <= thresh: 
      rtotalltms += entry['value'] 
     if gsamp == 1: 
      print "DEBUG gsamp=%d" % gsamp 

      [...] 
+0

しかしgsampがスコープ内に残っている、なぜそれがループの次に高いレベルと同じgsampを使用していないだろうか? – BenH

関連する問題