python 变量作用域

一般规则

1定义的函数内部的变量名如果是第一次出现, 且在=符号前,那么就可以认为是被定义为局部变量
2.函数内部的变量名如果是第一次出现,且出现在=符号后面,且在之前已被定义为全局变量
3.函数中使用某个变量时,如果该变量名既有全局变量也有局部变量,则默认使用局部变量
4.在函数中将某个变量定义为全局变量时需要使用关键字global

坑1
这样会报错。因为在函数内部已经重新定义var。不过在之前引用是引用不到的。

var = 1
def fun():
  print var
  var = 200
print fun()

变量作用域

L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内建作用域
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

Python除了def/class/lambda 外,其他如: if/elif/else/ try/except for/while并不能改变其作用域。定义在if里面的变量外部依然能访问

闭包Closure
闭包的定义:如果在一个内部函数里,对在外部函数内(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)

闭包变量的值是执行的时候。外面函数的值

globals() 和 locals() 提供了基于字典的访问全局和局部变量的方式
globals()[‘var’]
locals()两个东西能把局部变量直接传出去。很猛的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值