zoukankan      html  css  js  c++  java
  • python 变量作用域

    http://blog.csdn.net/lovingprince/article/details/6627555

    几个概念:

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

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

    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的作用域概念有点不一样。

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

    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. 当然如果的确要修改全局变量的值,则需要如下:

    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

    再看一种这种情况:

    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,就用他了。

  • 相关阅读:
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
    7. Reverse Integer
    6. ZigZag Conversion
    《设计模式
    《设计模式
    《设计模式
    《linux 计划任务》- cron
    《设计模式
  • 原文地址:https://www.cnblogs.com/qiangupc/p/4157126.html
Copyright © 2011-2022 走看看