Python学海无涯路【第09回】:全局变量和局部变量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chuhe163/article/details/89077621


1、局部变量

name = "全局变量"

def test():
    name = "局部变量"
    print(name)

if __name__ == "__main__":
    test()

输出:
局部变量

2、gloabl

python在使用全局变量时需要在函数内部先对变量加一个global

name = "全局变量"

def test():
    global name         #不可写成global name="修改全局变量"
    name="修改全局变量"
    print(name)

if __name__ == "__main__":
    test()

输出:
修改全局变量

2、nonlocal

name="全局变量"
def outer():
    name="outer"            #outer函数内声明了局部变量
    def inner():
        nonlocal name       #引用上一级的name,如果上一级未定义name会报错
        print(name)         #打印的是上一级的name,即outer的name
    inner()
    print(name)             #打印outer的name

if __name__=="__main__":
    outer()
    print(name)

输出:
outer
outer
全局变量

3、函数内不可以修改全局变量的值

a = 1
def test():
    a+=1		#如果写成a=a+1,相当于声明了a为局部变量
    print(a)
if __name__ == "__main__":
    test()

报错:
UnboundLocalError: local variable ‘a’ referenced before assignment

name="全局变量"
def test():
    print(name)
    name="局部变量"
test()

报错:
UnboundLocalError: local variable ‘name’ referenced before assignment

4、函数内可以访问全局变量

a = 1
def test():
    print(a)
if __name__ == "__main__":
    test()

输出:
1

5、函数内可以修改全局变量元素的值

a = [1,2,3]
def test():
    a[0]=11
    print(a)
if __name__ == "__main__":
    test()

输出:
[11, 2, 3]

6、函数中访问同名的全局变量和局部变量

name="全局变量"
def test()
    name="局部变量"
    global name
    name="修改变量"
    print(name)

if __name__=="__main__":
    test()

报错:
SyntaxError: invalid syntax
python中无法像C++一样可以用::或者this来区别函数中同名的全局变量和局部变量(此结论有待验证)

6、隐藏变量(非专业术语)

global适用于函数内部修改全局变量的值

nonlocal适用于嵌套函数中内部函数修改外部变量的值

如果没有使用以上关键字,对全局变量或者外部变量进行修改,python会默认将全局变量隐藏起来

def outer():
    var = 1
    def inner():
        var = 2
        print(var) 
    inner()

if __name__ == "__main__":
    outer()

输出:
2


将上例中第4、5行代码调换位置,如下

def outer():
    var = 1
    def inner():        
        print(var)  # inside函数改变了var所以python将var隐藏了起来,这里的print找不到var因而报错。
        var = 2
    inner()

if __name__ == "__main__":
    outer()

报错:
print(var) # inside函数改变了var所以python将var隐藏了起来,这里的print找不到var因而报错。
UnboundLocalError: local variable ‘var’ referenced before assignment

7、全局变量和局部变量的命名

  • 全局变量:大写字母,单词之间用_分割 ,例:
NUMBER 
COLOR_WRITE
  • 普通变量:小写字母

猜你喜欢

转载自blog.csdn.net/chuhe163/article/details/89077621