Python基础(六)函数作用域

1. 变量作用域

在python中,作用域可以分为:

  • 内置作用域:python预先定义的
  • 全局作用域:所编写的整个程序
  • 局部作用域:某个函数内部范围

每次执行函数,都会创建一个新的命名空间,这个新的命名空间就是局部作用域。

同一函数不同时间运行,其作用域也是独立的。

不同函数也可以具有相同的参数名,其作用域也是独立的。

def fn():
  a= 3  # 局部变量
  print('内部: ', a)  # 内部:  3

fn()
print(a)  # name 'a' is not defined

【代码说明】上述代码中在函数内部定义了变量a,因其在函数内部的局部作用域中定义,所以在函数外是取不到的,报错:name 'a' is not defined

a = 17

def fn():
  print(a)  # 17

fn()
print(a)  # 17

【代码说明】在函数内部可以使用全局变量,反之不可

但是在函数内使用全局变量时,也要注意其声明的先后顺序,如下:

def fn():
  print(a)  # 17

a = 17
fn()

print(a)  # 17

【代码说明】上述全局变量a在函数调用前声明,在函数内部可以使用,如果像下面这样使用的话:

注意: 在局部作用域中可以引用全局变量,但是不可以修改它,如下代码会发生错误:

def fn():
  a += 3
  print(a)  # UnboundLocalError: local variable 'a' referenced before assignment

a = 17
fn()

def fn():
  print(a)  # name 'a' is not defined

fn()
a = 17

【代码说明】上述代码中,全局变量a在函数fn调用后声明,在函数内部是获取不到的,会报错

a = 17  # 全局变量

def fn():
  a = 3  # 局部变量
  print(a)  # 3

fn()
print(a)  # 17

【代码说明】上述代码中,两个a处于不同的作用域,所以互不影响

2. global

如果要在函数中使用函数外的变量,可以在变量名前使用global关键字

示例代码:

def fn():
  global a  # 使用全局变量
  a = 170
  a += 3
  print(a)  # 173

a = 17
fn()
print(a)  # 173
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值