2012-02-13 27 views
1

私はまだPythonには新しく、私によって書かれていない以下のコードを見直しています。Python:まだ関数で呼び出された未定義の変数ですが、動作しますか?

誰かが、変数 "clean"の最初のインスタンスがcheck_arguments関数でどのように呼び出せるか説明してください。まるでまだ定義されていない変数を呼んでいるかのように思えます。コードは動作しますが、 "clean"を呼び出すとエラーが発生しませんか?

私はこれを参照しているビットを明確にすることです。次のように

def check_arguments(ages): 
    clean, ages_list = parse_ages_argument(ages) 

完全なコードがある...

def check_arguments(ages): 
    clean, ages_list = parse_ages_argument(ages) 
    if clean != True: 
     print('invalid ages: %s') % ages 
    return ages_list 

def parse_ages_argument(ages): 
    clean = True 
    ages_list = [] 
    ages_string_list = ages.split(',') 
    for age_string in ages_string_list: 
     if age_string.isdigit() != True: 
      clean = False 
      break 
    for age_string in ages_string_list: 
     try: 
      ages_list.append(int(age_string)) 
     except ValueError: 
      clean = False 
      break 

    ages_list.sort(reverse=True) 
    return clean, ages_list 

ages_list = check_arguments('1,2,3') 
print(ages_list) 
+1

ここで問題を理解できません。 「check_arguments関数で呼び出された」とはどういう意味ですか? cleanは変数です。どのように呼び出されていますか? – spicavigo

答えて

0

変数が呼び出されていないので、これは最初に質問するのは無意味です。機能があります。さらに、「インスタンス」は、通常、「コードリストに問題のものが出現する」ではなく、「何らかのクラス型の値」を意味する。

言い換えれば、問題のコード行は未定義の変数cleanを使用していません。 は、の変数clean(と同時にages_list)を定義しています。 parse_ages_argumentは2つの値を返します(returnステートメントを調べるとわかります)。返された2つの値は、それぞれ2つの変数に割り当てられます。

+0

カールの説明をありがとう。 Ignacioの答えとリンクは明らかに正確ですが、私は受け入れられた答えとしてあなたを選択しました。これは、初心者の視点からこのコードで何が起こっているかを私が理解するのを助けました。みんな、ありがとう。 – jelloir

7

Pythonはコンマ演算子を持っていません。あなたが見ているのはsequence unpackingです。 check_arguments機能で呼び出すことができているか、変数の最初のインスタンス「クリーン」

>>> a, b = 1, 2 
>>> print a, b 
1 2 
+0

これは初心者のために混乱していると思います。特に、シーケンスを解凍している関数の戻り値です。私は 'clean、ages_list ='を 'test_ret_val ='に置き換え、 'print test_ret_val'を置き換えて何が起きているのかを理解することをお勧めします。 – jozzas

関連する問題