python 04 global 和 nonlocal

 

目录

一、 全局变量 和 局部变量

二、global 和 nonlocal

2.1 global 关键字

如果函数的内容无 global 关键字

如果函数的内容有 global 关键字

全局变量 和 局部变量的命名规则

总结:

2.2 nonlocal 关键字

​测试代码: 



一、 全局变量 和 局部变量

局部变量:定义在函数内部的变量称为局部变量,他的作用域范围为函数内,也就是出了函数外就无效。
全局变量:定义在函数外的变量称之为全局变量,他的作用域范围为全局。
        全局变量是位于模块文件内部的顶层的变量名
        全局变量如果是在函数内被赋值的话,必须经过声明
        全局变量名在函数内部不经过声明也可以被引用


二、global 和 nonlocal


2.1 global 关键字

如果函数的内容无 global 关键字

   有声明局部变量 ,使用方法内的变量

NAME = ["xu1", "xu2"]
def pName():
    NAME = "xu"
    print("name is ", NAME)  # 使用的是局部声明的变量
pName()  # name is  xu

    如果无生命局部变量
    方法内没声明变量,到方法外找,找到全局变量,使用全局变量

NAME = ["xu1", "xu2"]
def pName():
    NAME.append("xu3")
    print("name is ", NAME)  # 使用的是全局声明的变量
pName()  # name is  ['xu1', 'xu2', 'xu3']

如果函数的内容有 global 关键字

有声明局部变量, 使用方法内的变量

NAME = ["xu1", "xu2"]
def pName():
    NAME = "XU"
    print("name is ", NAME)
pName()  # name is  XU
print(NAME)  # ['xu1', 'xu2']


# 声明了局部变量,不能在引入全局变量
def pName():
    NAME = "XU"
    global NAME  # SyntaxError: name 'NAME' is assigned to before global declaration
    print("name is ", NAME)
pName()  # 报错

无声明局部变量, 通过global 声明全局变量,使用全局变量

NAME = ["xu1", "xu2"]
def pName():
    global NAME
    NAME = ["XU"]
    print("name is ", NAME)
pName()  # name is  ['XU']
print(NAME)  # ['XU']

全局变量 和 局部变量的命名规则

 全局变量名大写, 局部变量名小写  进行区分

 

总结:

(1)方法作用域内优先读取局部变量,能读取全局变量,无法对全局变量重新赋值;但是对于可变类型,可以对内部元素进行操作
(2)如果函数中有 global关键字,变量本质上就是全局的那个变量,可以读取可以赋值。


2.2 nonlocal 关键字

    指定上一级变量,如果没有就继续往上找,直到找到为止
    nonlocal 列出的变量必须在上一层定义过,否之将报错,其查找的作用域仅为嵌套的def

NAME = "XU1"
name1 = "11"
def pName():
    NAME = "xu2"
    def p1Name():
        # nonlocal NAME, name1  # def 内没有声明name1 报错
        nonlocal NAME
        NAME = "xu3"
    p1Name()
    print(NAME)
print(NAME)
pName()
print(NAME)

​测试代码

https://github.com/vagrant-x/python_base/blob/main/03_python_%E5%9F%BA%E7%A1%80/014_test_global_nonlocal.py

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值