博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 作用域
阅读量:4648 次
发布时间:2019-06-09

本文共 542 字,大约阅读时间需要 1 分钟。

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

你可能感兴趣的文章
6.1 文件对象常用方法与属性
查看>>
排列组合问题
查看>>
小知识点
查看>>
【笔记】HybridApp中使用Promise化的JS-Bridge
查看>>
模拟赛 sutoringu
查看>>
hdu 1253 胜利大逃亡 (广搜)
查看>>
华为上机试---购物单(算法:背包问题)
查看>>
PHP操作Mongodb API 及使用类 封装好的MongoDB操作类
查看>>
PHP实现经典算法
查看>>
NodeJS(四)Mac下如何安装package.json里面会产生依赖项
查看>>
MapReduce会自动忽略文件夹下的.开头的文件
查看>>
Android Learning:数据存储方案归纳与总结
查看>>
ACM题目————A simple problem
查看>>
Emmet的使用
查看>>
JAVA中Response的几种用法(设定时间调整到指定页面 ....... )
查看>>
java之sleep、wait、yield、join、notify乱解
查看>>
DEDECMS 关键字不能小于2个字节!
查看>>
Flutter学习笔记(10)--容器组件、图片组件
查看>>
gitlab 的使用策略和简单介绍
查看>>
Web.py Cookbook 简体中文版 - 保存上传的文件
查看>>