Python老男孩 day14 函数(二) 局部变量与全局变量

时间:2023-02-11 21:53:10

https://www.cnblogs.com/linhaifeng/articles/6113086.html

——————————————————————————————————————

五、局部变量与全局变量

在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

name='lhf'

def change_name():
    print('我的名字',name)

change_name()

运行结果:
我的名字 lhf

def change_name():
    name='帅了一笔'
    print('我的名字',name)

change_name()
print(name)

运行结果:
我的名字 帅了一笔
lhf

def change_name():
    global name
    name='帅了一笔'
    print('我的名字',name)

change_name()
print(name)


运行结果:
我的名字 帅了一笔
帅了一笔

NAME = "产品经理"

def yangjian():
    global NAME # 已经声明,NAME就是全局的的那个变量
    print('我要搞', NAME)
    NAME = "小东北"  # 修改 全局的变量
    print('我要搞', NAME)

yangjian()

 

 运行结果:

我要搞 产品经理
我要搞 小东北

#如果函数的内容无global关键字
-有声明局部变量

NAME = ["产品经理","廖波湿"]
def qupengfei():
    NAME = "自己"
    print('我要搞', NAME)
qupengfei()

运行结果:
我要搞 自己

-无声明局部变量

NAME = ["产品经理", "廖波湿"]

def qupengfei():
    NAME.append('XXOO')
    print('我要搞', NAME)

qupengfei()

 


运行结果:
我要搞 ['产品经理', '廖波湿', 'XXOO']

#如果函数中有global关键字

-有声明局部变量

NAME = ["产品经理","廖波湿"]
def qupengfei():
    NAME = "自己"
    global NAME
    print('我要搞', NAME)
qupengfei()

运行结果:
报错
SyntaxError: name 'NAME' is assigned to before global declaration


-无声明局部变量

NAME = ["产品经理","廖波湿"]
def qupengfei():
    global NAME
    NAME = ["阿毛"]
    NAME.append('XXOO')
    print('我要搞', NAME)
qupengfei()

 

 运行结果:

我要搞 ['阿毛', 'XXOO']


*** 全局变量变量名大写
*** 局部变量变量名小写

 

#优先读取局部变量,若无则只能读取全局变量,无法对全局变量重新赋值
#但是对于可变类型,可以对内部元素进行操作
#如果函数中有global关键字,变量本质上就是全局变量,可读取可赋值 NAME='fff'

 

NAME = '海风'

def huangwei():
    name = "黄伟"
    print(name)
    def liuyang():
        name = "刘洋"
        print(name)
        def nulige():
            name = '沪指花'
            print(name)
        print(name)
        nulige()
    liuyang()
    print(name)

huangwei()

 

运行结果:
黄伟
刘洋
刘洋
沪指花
黄伟

解题思路:

Python老男孩 day14 函数(二) 局部变量与全局变量

 

name = "刚娘"

def weihou():
    name = "陈卓"
    def weiweihou():
        global name     #获取的是全局的name,并没有改变weihou()内的name = "陈卓"
        name = "冷静"

    weiweihou()
    print(name)     #所以输出 陈卓

print(name)
weihou()
print(name)

运行结果:
刚娘
陈卓
冷静

 

name = "刚娘"

def weihou():
    name = "陈卓"
    def weiweihou():
        nonlocal name   # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止
        name = "冷静"

    weiweihou()
    print(name)

print(name)
weihou()
print(name)

运行结果:
刚娘
冷静
刚娘