pythonグローバル変数vsローカル変数

6535 ワード

  • グローバル変数関数内はアクセスのみ、変更はできません(listを除く)
  • ## --* -- coding: utf-8 --*--
    def test():
    	print(val)
    
    val = 99
    test()
    

    出力:
    99
    

    関数内でグローバル変数を変更すると、エラーが発生します.
    # --*-- coding: utf-8 --*--
    def test():
        val += 1
        print(val)
        
    val = 99
    test()
    print(val)
    

    エラー出力:
    Traceback (most recent call last):
      File "C:\Users\ZZWfree\Desktop\test.py", line 7, in <module>
        test()
      File "C:\Users\ZZWfree\Desktop\test.py", line 3, in test
        val += 1
    UnboundLocalError: local variable 'val' referenced before assignment
    
  • listはデフォルトでグローバル変数です.関数内で再定義する必要はありません.変更は有効です(メモリを直接変更します)
  • .
    # --*-- coding: utf-8 --*--
    def test():
        output.append('zzw')
        print(output)
        
    output = []
    test()
    print(output)
    

    しゅつりょく
    ['zzw']
    ['zzw']
    

    関数内でlistグローバル変数を再定義すると、その変数は自動的にローカル変数になり、関数外の変数とは関係ありません.
    # --*-- coding: utf-8 --*--
    def test():
        output = ['b']
        output.append('zzw')
        print(output)
        
    output = ['a']
    test()
    print(output)
    

    しゅつりょく
    ['b', 'zzw']
    ['a']
    
  • 関数内でグローバル変数を変更し、globalキーワードを追加し、メモリ
  • を直接変更します.
    # --*-- coding: utf-8 --*--
    def test():
        global val
        val += 1
        print(val)
        
    val = 99
    test()
    print(val)
    

    しゅつりょく
    100
    100