变量作用域

Python的作用域一共有4种,分别是:

L (Local) 局部作用域

E (Enclosing) 闭包函数外的函数中

G (Global) 全局作用域

B (Built-in) 内建作用域

L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

 

x = int(2.9)  # 内建作用域

g_count = 0  # 全局作用域

def outer():

    o_count = 1  # 闭包函数外的函数中

    def inner():

        i_count = 2  # 局部作用域

内建作用域

内置作用域是通过一个名为builtin的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它。在Python3.0中,可以使用以下的代码来查看到底预定义了哪些变量:

import builtins

dir(builtins)

全局变量,局部变量举例

def changeme(mylist):

    # "修改传入的列表"

    mylist.append([1, 2, 3, 4])  这里没有定义,也没有报错,说明milist以已经存在,修改的是全局变量

    print("函数内取值1: ", mylist)

    print("2", id(mylist))

    # mylist.clear()

    mylist  = [9,8,7,6,这里定义的是局部变量,和函数外定义的同名列表的id是不一样的,一个是局部变量一个是全局变量,以下在修改是局部变量,和全局变量没有关系。对可更改类型的引用进行修改,结果就不一样了。
    print("函数内取值2: ", mylist)

    print("3", id(mylist))

    return mylist

# 调用changeme函数

mylist = [10, 20, 30]

print("1", id(mylist))

print("4", id(changeme(mylist)))

print("函数外取值: ", mylist)

print("5", id(mylist))

global nonlocal关键字

global当内部作用域想修改外部作用域的变量时,就要用到globalnonlocal关键字了。

 

Nonlocal如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了(在二层函数中修改一层函数的局部变量)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值