Python——变量作用域

变量作用域


变量的作用域其实就相当于变量的命名空间,赋值过的变量并不是在哪里都可以使用的。如何定义变量决定了变量可以在哪里被使用。 Python中变量赋值的位置决定了哪些范围的对象可以访问这个变量,这个范围就被称为作用域。
Python中有两种最基本的变量作用域:局部变量和全局变量。

局部变量

一般情况下,在函数内赋值的变量,不做特殊声名的都是局部变量。顾名思义,局部变量的作用域是局部的,在当前函数赋值则只能在当前函数使用。
如果在函数体中第一次出现的,就是局部变量,例如:

def foo():
    x = "hello"
    print(x)

foo()

执行结果如下:

hello

可以看到,函数内正确打印出了“x”变量的内容。“x”是在函数体内被赋值的,所以“x”是局部变量。局部变量只能在函数体内被访问,超出函数体的返回就不能正常执行,例如:

def foo():
    x = "hello"
    print(x)

foo()
print(x)

执行结果如下:

hello
NameError: name 'x' is not defined

从执行结果中我们可以发现:在函数体内的“print(x)”成功执行,但是函数体外的“print(x)”执行失败,并且收到错误信息:“x”没有定义。
不只在函数体内赋值的变量是局部变量,函数定义时的参数也是局部变量,例如:

def foo(x):
    print(x)

foo("hello")
print(x)

执行结果如下:

hello
NameError: name 'x' is not defined

可以看到,这个例子和上一个例子都得到了相同的结果:在函数体内的“print(x)”成功执行,但是函数体外的“print(x)”执行失败,并且收到错误信息:“x”没有定义。这说明函数声名时的参数也是局部变量,只能在函数体内使用。

全局变量

在函数外赋值的变量就是全局变量,全局变量可以在整个程序范围内被访问。例如:

x = "hello"

def foo():
    print(x)

foo()

执行结果如下:

hello

从执行结果可以发现,函数foo中的“print(x)”被正常执行了,说明在函数体外的变量可以正常地在函数体内访问。但是,函数体内的重新赋值的相同函数名字变量并不会改变函数体外的全局变量,例如:

x = "函数体外"

def foo():
    x = "函数体内"
    print(x)

foo()
print(x)

执行结果如下:

函数体内
函数体外

从执行结果中我们可以发现,函数foo对“x”进行赋值操作时并没有改变函数体外的“x”变量。说明如果在函数体内对“x”进行“修改”(其实是创建了一个新的变量,只是名字与函数体外的“x”变量相同),并不会修改函数体外的“x”。
如果想对函数体外的变量进行修改,我们可以使用“global”关键字,例如:

x = "函数体外"

def foo():
    global x
    x = "函数体内"
    print(x)

foo()
print(x)

执行结果如下:

函数体内
函数体内

从执行结果可以发现,在函数体内修改全局变量“x”为“函数体内”,函数体外的全局变量“x”也变成了“函数体内”。所以如果要在函数体内修改全局变量,就一定要添加“global”关键字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值