2017-06-23 13 views
0

でアクセスグローバルリストを、私は、Pythonに新しいですが、この前に、私はこのコードを実行すると、私はC.Pythonの - 機能

def cmplist(list): #Actually this function calls from another function 
    if (len(list) > len(globlist)): 
     globlist = list[:] #copy all element of list to globlist 

# main 
globlist = [1, 2, 3] 
lst = [1, 2, 3, 4] 
cmplist(lst) 
print globlist 

を使用していた、それは私がしたい、次のエラー

if (len(list) > len(globlist)): 
NameError: global name 'globlist' is not defined 

を示し引数として渡さずに関数からgloblistにアクセスして変更することができます。この場合、出力は

[1, 2, 3, 4] 

でなければなりません。誰でも解決策を見つけるのを手助けできますか?

いつでも歓迎されます。 ありがとうございます。

編集: ありがとうMartijn Pietersの提案。 Origionalエラーは、あなたが行うことができます

UnboundLocalError: local variable 'globlist' referenced before assignment 
+0

あなたはそれがその例外をスローするコードであることを確認してください** **

def cmplist(list): global globlist ... # Further references to globlist 

をありますか?書かれているので、代わりに 'UnboundLocalError'を取得します。 –

+0

つまり、あなたは* NameErrorを取得できません。名前はあなたが投稿したサンプルコードで明確に定義されています。さらに上に、あなたが投稿したコードは関数*の中の 'globlist' *という名前に割り当てられ、以下の答えで説明されているように' global'ステートメントで特にオーバーライドされない限りローカルにします。しかし、あなたが投稿したコードに対して異なる例外が発生した場合にのみ意味があります。 –

+0

ご迷惑をお掛けして申し訳ございません。はい、次のエラーを表示します。 'UnboundLocalError:割り当て前にローカル変数 'globlist'が参照されています。 ' –

答えて

4

です:

def cmplist(list): #Actually this function calls from another function 
    global globlist 
    if (len(list) > len(globlist)): 
     globlist = list[:] #copy all element of list to globlist 

しかしそのようにそれを渡して、それを修正するために、よりPython的である可能性があります。あなたが関数内でグローバルとして宣言する必要が

+0

または' globlist [:] = list'を使用して 'global'キーワードを削除します。しかし、例外は非常に異なる問題を示しています。投稿されたコードと例外が一致しません。 –

+0

ありがとう、シメオン、それは動作します。 –

0

def cmplist(list): #Actually this function calls from another function 
    global globlist 
    if len(list) > len(globlist): 
     globlist = list[:] #copy all element of list to globlist 

# main 
globlist = [1, 2, 3] 
lst = [1, 2, 3, 4] 
cmplist(lst) 
print globlist 
0

機能cmplist内部では、オブジェクトのgloblistは「グローバルスコープからではないと考えられます。 Pythonインタプリタはそれをローカル変数として扱います。その定義は関数cmplistにはありません。したがって、エラー。 関数の中では、最初に使用する前にgloblistを 'global'と宣言します。このような 何か動作します:HTH、 Swanand