python 作用域

python能够改变变量作用域的代码段是def、class、lamda.  ( 模块,类以及函数才会引入新的作用域 )

if/elif/else、try/except/finally、for/while 并不能涉及变量作用域的更改,也就是说他们的代码块中的变量,在外部也是可以访问的

变量搜索路径是:本地变量->全局变量

注意以下例子,跟js很像:

 

i = 0
def f():
  print i
  i = 0
f()

 

运行结果显示:UnboundLocalError: local variable 'i' referenced before assignment。

因为在函数 f() 中出现了变量 i=0,编译器会认为i属于局部变量(local),根据LEGB规则,先搜索local变量,则在 print i 语句时候,局部变量 i 还没有赋值,故抛出异常。

 

 

i = 0
def f():
  i += 1
  print i
f()
 
 

以上同样会报错,i += 1 等价于 i = i + 1,因为 x= 是一个定义变量的行为,则 i + 1 中的 i 实际上市未定义的

转载于:https://www.cnblogs.com/vineleven/p/4777452.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值