2016-08-17 2 views
-2

Я отправляю простой код, чтобы понять, как решить мою проблему. Цикл while имеет 2 цикла, но в реальном случае имеет миллиард циклов.Построен список функций

def uno_trov(): 
      if(1==1): 
        return True 
      else: 
       return False 
def due_trov(): 
       if(1==0): 
         return True 
       else: 
        return False 

condizioneV = [] 
condizione = [1, 0] #1 or 0 inside can be change by the user 
first_time = False 
i=0 
while(i<2): 
    if(first_time == False): #whit the first cycle I build condizioneV (list of functions) 
         if(condizione[0]==1): 
              condizioneV.append(uno_trov) 
         if(condizione[1]==1): 
              condizioneV.append(due_trov) 
         first_time = True 
         print(condizioneV) #I expect [True] 
         i+=1 
    else: #second time condizioneV is already builded and I suppose the process will be more fast because the code not check anymore " if(condizione[1]==1)" 
      print(condizioneV) #I expect [True] 
      i+=1 
#problem is that I obtain "[<function uno_trov at 0x0272DED0>]" two time. 

Я не понимаю причины, но я получаю «[]» два раза. Это не ошибка, но у меня не было списка с одним или двумя True/False.

+0

Вы добавляете _function_, а не _выполнение функции call_. Попробуйте 'condizioneV.append (uno_trov())'. –

+0

Почему это вниз? –

ответ

1
condizioneV.append(uno_trov) 

добавляет адрес функции вы недостающую коррекции ()

:

condizioneV.append(uno_trov()) 

Общее замечание: ваш код очень плохо написана и запутанным. посмотрите на ваше условие first_time, которое, например, обратное. И отступ ужасен.

+0

'if (1 == 1):' мой любимый –

0

Это довольно сложный код, который у вас там есть. Я не могу представить, что он пытается сделать. Я предполагаю, что вы новичок.

Но причина, по которой ваши массивы содержат функции, состоит в том, что эти две строки добавляют сами функции в массивы, функции не выполняются.

Вместо этого:

         condizioneV.append(uno_trov) 
            condizioneV.append(due_trov) 

Вы должны сделать это:

         condizioneV.append(uno_trov()) 
            condizioneV.append(due_trov()) 
+0

Duke спасибо. Чтобы решить другую проблему? Выше я отправляю код – lausent

0

Да, это решение одного цикла, но если вы пытаетесь использовать его передать параметр в функция больше не работает. Я добавляю «т = я» в первом случае, если:

def uno_trov(t): 
      if(1==t): 
        return True 
      else: 
       return False 
def due_trov(): 
      if(1==0): 
        return True 
      else: 
       return False 

condizioneV = [] 
condizione = [1, 1] #1 or 0 inside can change by the user 
first_time = False 
i=0 
while(i<2): 
    if(first_time == False): #whit first cycle I build condizioneV 
         if(condizione[0]==1): 
              t=i 
              condizioneV.append(uno_trov(t)) 
         if(condizione[1]==1): 
              condizioneV.append(due_trov()) 
         first_time = True 
         print(condizioneV) #I expect [False] 
         i+=1 
         t=i 
    else: #second time condizioneV is already build but not properly work good 
      print(condizioneV) #I expect [True] but instead I get [False] 
      i+=1 
      t=i 

Других словах, я хотел бы, что с первым циклом я строем списка функций и от второго цикла до конца, выполнить список функций.

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