2016-11-25 3 views
1

У меня есть две функции. Пожалуйста, ознакомьтесь с нижеприведенными функциями;Использование возвращаемого значения внутри другой функции

def check_channel_number(self): 

    print "***************Channel Checker *********************" 

    print '' 

    user_channel_number = int(re.sub('\D', '', raw_input("Enter a channel number, (3digit): "))[:3]); 

    channel = ("channelNr= '%d'") % (user_channel_number) 

    print channel 

    # channel_search = channel + str(user_channel_number) 

    datafile = file('output.txt') 

    found = False 

    for line in datafile: 

     if channel in line: 

      found = True 
      print 'The channel number you entered is correct and will be deleted' 
      return user_channel_number 

    print 'The channel number you entered is not on the planner' 
    return False 

Просто хочу использовать возвращаемое значение (user_channel_number) в следующей функции.

def delete_events(self): 



    if user_channel_number == True: 

     return 'The program number is correct and will be deleted' 

     # action = 'DeleteEvent' 
     menu_action = 'all' 
     book = 'RECYC:687869882' 
     arg_list = [('C:\\Users\\yke01\\Documents\\StormTest\\Scripts\\Completed' 
         '\\Utils\\UPNP_Client_Cmd_Line.py')] 
     arg_list.append(' --action=') 
     arg_list.append(action) 
     arg_list.append(' --ip=') 
     arg_list.append('10.10.8.89') 
     arg_list.append(' --objectId=') 
     arg_list.append(book) 

     subprocess.call(["python", arg_list]) 

     print 'The program deleted successfully' 

Когда я бегу мой сценарий, он говорит user_channel_number не определено во всем мире? Как я могу позвонить user_channel_number внутри функции delete_events()?

+0

1. Вы typecasted '' user_channel_number' к int', а затем попытаться сравнить его с 'true'. 2. 'check_channel_number' всегда возвращает false. 3. Ваш оператор return в 'delete_events' останавливает весь код после его запуска. Похоже, ты в классе? Вы можете определить 'self.user_channel_number', чтобы сделать его доступным для всех методов в классе, в котором вы находитесь. – Signal

ответ

2

Функции не могут передавать свои локальные переменные. Вы можете вернуть значение из первого и передать его на второй:

def check_channel_number(self): 
    ... 
    return user_channel_number 

def delete_events(self): 
    user_channel_number = self.check_channel_number() 
    ... 

Или сохранить значение на объекте:

def check_channel_number(self): 
    ... 
    self.user_channel_number = user_channel_number 
    ... 

def delete_events(self): 
    if self.user_channel_number: 
     .... 
1

Так что я думаю, что при вызове функции check_channel_number, user_channel_number определяется там, поэтому, когда вы звоните delete_events, он вышел из сферы действия, возможно, что-то подобное поможет?

user_channel_number = check_channel_number() 
delete_events() 

я бы, вероятно, имеют user_channel_number в качестве входных данных для функции удаления тоже, так что она превратится в это: (где ОКН является user_channel_number)

def delete_events(self, ucn): 
    if ucn == True: 
     print 'The program number is correct and will be deleted' 

     # action = 'DeleteEvent' 
     menu_action = 'all' 
     book = 'RECYC:687869882' 
     arg_list = [('C:\\Users\\yke01\\Documents\\StormTest\\Scripts\\Completed' 
        '\\Utils\\UPNP_Client_Cmd_Line.py')] 
     arg_list.append(' --action=') 
     arg_list.append(action) 
     arg_list.append(' --ip=') 
     arg_list.append('10.10.8.89') 
     arg_list.append(' --objectId=') 
     arg_list.append(book) 

     subprocess.call(["python", arg_list]) 

     print 'The program deleted successfully' 

Я также изменил `возвращение «Номер программы правильный и будет удален» в заявлении на печать, поскольку у меня есть ощущение, что возврат завершит работу до того, как будут запущены другие строки кода.

Таким образом, код, вероятно, окажется чем-то вроде :

user_channel_number = check_channel_number() 
delete_events(user_channel_number) 

EDIT:

только заметил, что это выглядит, как ваши функции являются частью класса,

в этом случае, вы можете сделать:

self.ucn = self.check_channel_number() 
self.delete_events(self.ucn) 

(или если вы не хотите для передачи user_channel_number в функцию, которую вы могли бы изменить if user_channel_number: - if self. user_channel_number:

3

Когда вы определяете переменную внутри функции, она является локальной переменной, что означает, что к ней можно получить доступ только внутри этой функции.

Внутри класса

Похоже, что вы находитесь внутри класса, так что вы можете сделать переменную доступной для всех методов в классе, определив его как это:

def check_channel_number(self): 

    self.user_channel_number = ... 

И то в вашей второй функции, вы можете использовать его как в следующем:

def delete_events(self): 

    if self.user_channel_number: 

Вне класса

Если вы не используете методы внутри класса, вы можете вместо этого использовать global встроенную команду.

Например,

def check_channel_number(): 

    global user_channel_number 
    user_channel_number = ... 

def delete_events(): 

    if user_channel_number: 

     ... 

Используя возвращаемое значение из функции

Вместо вашей первой функции, check_channel_number(), вы можете иметь его вернуть user_channel_number. Затем можно вызвать эту функцию внутри delete_events(), как следующее:

def check_channel_number(): 

    user_channel_number = ... 
    return user_channel_number 

def delete_events(): 

    if check_channel_number(): 

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