欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python作用域疑问记录

程序员文章站 2022-04-11 08:40:03
a=0#回车 print(a)#回车 输出0 #复制下面这一段开始 def funcA(): b='A'def funcB(): a=2 b='B' print(a,b) def funcC(): nonlocal a b='C' a=3 print(a,b) ... ......
a=0#回车
print(a)#回车 输出0
#复制下面这一段开始
def funcA():
    b='A'def funcB():
        a=2
        b='B'
        print(a,b)
    def funcC():
        nonlocal a
        b='C'
        a=3
        print(a,b)
    def funcD():
        global a
        b='D'
        a=4
        print(a,b)
    a=5
    print(a,b)
    funcB()
    funcC()
    funcD()
    print(a,b)
#复制结束
funcA()#调用函数
#输出结果5 A#第一次输出全局变量a和局部变量b
2 B#第二次输出funcB()结果,和预想的一样,同C#
3 C#第三次输出funcC()结果,和预想一样,还没看出却别
4 D#第四次输出funcD()结果,和预想一样,还没看出却别
3 A#第五次输出上面3个函数执行后的结果,发现全局变量a结果为3而不是5,这跟C#中的引用传参、静态变量有啥区别?
print(a)#输出4
print(a,b)#报错,全局变量只有a,如果funcD()中加一句global b会怎样呢?报错?
#错误信息如下:
Traceback (most recent call last):
  File "<pyshell#122>", line 1, in <module>
    print(a,b)
NameError: name 'b' is not defined