2016-12-27 30 views
0

私は次のコードを持っています。Python。別の関数内の関数を呼び出す

def num_dim(response_i, m): 

    for response_j in response_i['objcontent']: 
     if response_i['objkey']== 'explorecube_dimvalues': 
     mm = [response_j['title']] 
     m.append(mm) 

    m=(len(m)) 
    return m 


if __name__=='__main__': 

    for response_i in response['response']: 
     m=[ ] 
     x=0 
     def num_dim_2(response_i, m): 
      if response_i['objkey']== 'explorecube_dimvalues': 
       m = num_dim(response_i, m) 
       print(m) 
      return m 
     num_dimentions= num_dim_2 (response_i, m) 
     print(num_dimentions) 

print(m)の出力は次のとおりです。

3 

しかしprint(num_dimentions)の出力は次のとおりです。私は3

誰もが私が修正できる方法を知っていると予想

[ ] 
[ ] 
3 
[ ] 

この問題(最終出力として3の値を得る)。ありがとうございました。

+0

なぜあなたが作成していますforループ内の関数?まず最初に行ったように関数を作成し、必要に応じて関数を呼び出すだけです。また、私たちは応答['応答']がループを理解するのが難しいかどうかわかりません –

+0

関数の入力を変更していることは理解できますか?あなたはあなたの関数(リストであり、渡される参照)の中でパラメータ 'm'を修正しています。また、それを返すのですか?それは意味がありません。コード全体がばかげている。 –

答えて

3

これは、以下のコードのためです。 if条件が失敗した場合でも

def num_dim_2(response_i, m): 
      if response_i['objkey']== 'explorecube_dimvalues': 
       m = num_dim(response_i, m) 
       print(m) 
      return m 

return m文はまだ空白のリストを返します。これは、実行されます。

さらに、ループ内でprint(num_dimentions)を実行しています。つまり、値はループが実行された回数だけ印刷されます。出力が1つだけ必要な場合は、何らかの条件に基づいて出力する必要があります。

注:その本当によくないプログラミングの練習と同じ変数名を使用して、異なるタイプの変数名を再利用する(例:!num_dimで、mがリストされ、突然mいくつかの整数である)

関連する問題