2016-11-25 4 views
1

私は2つの関数を持っています。以下の機能をご覧ください。別の関数の戻り値を使用する

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がグローバルに定義されていないと言いますか? delete_events()機能の中でuser_channel_numberに電話するにはどうすればよいですか?

+0

1.あなたはint' 'に' user_channel_number'を型変換 'true'にそれを比較してみてください:あなたは、次のように、delete_events()の内部でその関数を呼び出すことができます。 2. 'check_channel_number'は常にfalseを返します。 3. 'delete_events'のreturn文は、実行後のすべてのコードを停止します。あなたはクラスにいるようですね? '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を持っていると思います:(UCNは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' 

私も `リターンを変更しました他のコード行が実行される前に関数が終了すると感じているので、「プログラム番号は正しいですし、削除されます」

コードはおそらく:

EDIT
user_channel_number = check_channel_number() 
delete_events(user_channel_number) 

がちょうどその場合には、あなたの関数は、クラスの一部であるように見える

に気づいた、あなたが行うことができます:

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を返すことができます。その後、

def check_channel_number(): 

    user_channel_number = ... 
    return user_channel_number 

def delete_events(): 

    if check_channel_number(): 

     ...