2016-04-29 8 views
0

小さなスクリプト(これは部分的です)を記述したので、完全なコードは複数の.cファイルを検索し、その中のパラメータが使用されているかどうかを確認する必要があります。この特定のコードは、行からパラメータを取得する責任があるため、.cファイルで同じパラメータ名とその値を検索するために使用できます。メソッドがブランクになっていても、メソッド内で空でない場合

問題は、最初の瞬間(takeTheParamメソッド内)がコマンドプロンプトで正しいパラメータを示し、2番目の印刷インスタント(takeTheParamメソッドの呼び出し後)がコマンドプロンプトで空白を表示することです。

import os 

theParam = "" 

def takeTheParam(row, theParam): 
    for item in row.split(): 
     if "_" in item: 
      theParam = item 
      print theParam 
      return theParam 


for root, dirs, files in os.walk('C:/pathtoworkdir'): 
    for cFile in files: 
     if cFile.endswith('.c'): 
      with open(os.path.join(root, cFile), 'r') as this: 
       for row in this: 
        if '=' in row: 
         takeTheParam(row, theParam) 
         print theParam 
         while theParam not in usedParameters: # Has the param already been checked? 
          value(row, savedValue, statements, cur) 
          searchAndValueExtract(theParam, parameterCounter, compareValue) 
          while isEqual(savedValue, compareValue, equalValueCounter): 
           searchAndValueExtract(theParam, parameterCounter, compareValue) 
          else: 
           # If IsEqual returns false, that means a param has different values 
           # and it's therefore being used 
           usedParameters.append(theParam) 
           pass 

私はこれがなぜ起こるかを把握するのpythonでの十分な経験を得たhave't、私はtheParamは法の外で使用されるとき、それがコードの先頭にそれの定義から取得した値(theParam = ""だと思われます)、これが当てはまる場合、なぜ私は考えがわかりません。それは永遠に""をとどまるよう

+1

変数の似た名前と関数宣言で使用されている名前はあなたを欺くことです。 http://stackoverflow.com/a/292502/2564301 – usr2564301

答えて

3

変更

takeTheParam(row, theParam) 

theParam = takeTheParam(row, theParam) 

に返される変数は、あなたのケースでtheParamに割り当てられることはありません。今それはもうありません。

+0

を参照してください。それは 'takeTheParam'のために働いていますが、私のメソッドのいずれかが2つの値を返す場合はどうすればよいですか? –

+0

あなたは 'param1、param2 = func_that_returns_two_variables()'を実行します。そして、その関数内で 'return param1、param2'を返します – Mathias711

関連する問題