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

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

几个概念:

  • python能够改变变量作用域的代码段是def、class、lamda.
  • if/elif/else、try/except/finally、for/while 并不能涉及变量作用域的更改,也就是说他们的代码块中的变量,在外部也是可以访问的
  • 变量搜索路径是:本地变量->全局变量

  • python能够改变变量作用域的代码段是def、class、lamda.

[python] 
  1. def scopetest():  
  2.     localvar=6;  
  3.     print(localvar)  
  4.     
  5. scopetest()  
  6. #print(localvar) #去除注释这里会报错,因为localvar是本地变量  
  • if/elif/else、try/except/finally、for/while

[python] 
  1. while True:  
  2.     newvar=8  
  3.     print(newvar)  
  4.     break;  
  5.   
  6. print(newvar)  
  7.   
  8. try:  
  9.     newlocal=7  
  10.     raise Exception  
  11. except:  
  12.     print(newlocal)#可以直接使用哦  

输出结果:8 8 7

可见这个关键字中定义变量,他们的作用域跟外部是一致的,这个跟Java的作用域概念有点不一样。

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

[python] 
  1. def scopetest():  
  2.     var=6;  
  3.     print(var)#  
  4.       
  5. var=5   
  6. print(var)  
  7. scopetest()  
  8. print(var)  

输出结果:5 6 5

这里var 首先搜索的是本地变量,scopetest()中 var=6相当于自己定义了一个局部变量,赋值为6. 当然如果的确要修改全局变量的值,则需要如下:

[python] 
  1. def scopetest():  
  2.     global var   
  3.     var=6;  
  4.     print(var)#  
  5.       
  6. var=5   
  7. print(var)  
  8. scopetest()  
  9. print(var)  
输出结果:5 6 6

再看一种这种情况:

[python] 
  1. def scopetest():  
  2.     var=6;  
  3.     print(var)#  
  4.     def innerFunc():  
  5.         print(var)#look here  
  6.     innerFunc()  
  7.       
  8. var=5   
  9. print(var)  
  10. scopetest()  
  11. print(var)  
输出结果:5 6 6 5
根据调用顺序反向搜索,先本地变量再全局变量,例如搜先在innerFunc中搜索本地变量,没有,好吧,找找调用关系上一级scopetest,发现本地变量var=6,OK,就用他了。

转载地址:http://jveti.baihongyu.com/

你可能感兴趣的文章
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
laravel 修改api返回默认的异常处理
查看>>
laravel事务
查看>>
【JavaScript 教程】浏览器—History 对象
查看>>
这才是学习Vite2的正确姿势!
查看>>
7 个适用于所有前端开发人员的很棒API,你需要了解一下
查看>>
20种在学习编程的同时也可以在线赚钱的方法
查看>>
隐藏搜索框:CSS 动画正反向序列
查看>>
【视频教程】Javascript ES6 教程27—ES6 构建一个Promise
查看>>
【5分钟代码练习】01—导航栏鼠标悬停效果的实现
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(中)
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(下)
查看>>
【web素材】03-24款后台管理系统网站模板
查看>>