2016-12-27 8 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? Просто создайте функцию, как вы сделали первый, а затем при необходимости вызовите ее. Также мы не знаем, какой ответ ['response'] так сложно понять в цикле –

+0

Вы понимаете, что вы изменяете свои входные данные, правильно? Вы изменяете параметр 'm' в своих функциях (который является списком и поэтому передан как ссылка), и вы также возвращаете его ?! Это не имеет смысла. Весь фрагмент кода - тарабарщина. –

ответ

3

Это из-за ниже кода.

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

Даже если if условие не выполняется, return m оператор продолжает выполняться, который будет возвращать пустой список.

Далее вы выполняете print(num_dimentions) внутри цикла, что означает, что значение печатается столько раз, сколько выполняется цикл. Если вам нужен только один вывод, вам придется распечатать его на основе некоторого условия.

Примечание: его действительно не хорошая практика программирования использовать одни и те же имена переменных, а также повторно использовать имена переменных различных типов (например: в num_dim, m список и вдруг m некоторое целое число!)

Смежные вопросы