Python中的变量的作用域有时会让像我这样的初学者很头疼。

  其实只需要掌握以下两点:  

  1. Python能够改变变量作用域的代码段是def、class、lamda;

      而if/elif/else、try/except/finally、for/while 并不能更改变量作用域. 示例略

  2. 变量搜索路径是:本地变量 -> 上层变量

    示例如下:

def accessOut():
print(outVar) outVar = 10
accessOut()

  在上例中,def改变了变量的作用域. 当执行print(outVar)时, 当前层中没有找到变量outVar的定义, 所以到上一层中找, 找到了, 所以就

用这一层的outVar(值为10).当然如果在这一层中也没有找到outVar,那么就要继续到上一层中查找.

  如果你感觉这篇文章写得太简略了,你可以参照这里,讲得很详细.

  通过一个例子来进一步理解:

#!/usr/bin/python2.7
#File: demo.py
#Author: lxw
#Time: 2014-09-01 number = 5
def func0():
#It's OK to reference.
print number def func1():
#new local variable.
number = 10
print number def func2():
#global declaration.
global number
print number
number = 10
print number print "Before calling any function, number is {}".format(number)
print "Calling func0()----------"
func0()
print "Calling func1()----------"
func1()
print "After calling func1(), number is {}".format(number)
print "Calling func2()----------"
func2()
print "After calling func2(), number is {}".format(number)

Output:

lxw@ubuntu:~/Python/Practice$ python demo.py
Before calling any function, number is 5
Calling func0()----------
5
Calling func1()----------
10
After calling func1(), number is 5
Calling func2()----------
5
10
After calling func2(), number is 10

注意: 如果将func1改成下面的形式(注意与func0的对比):

def func1():
#new local variable.
print number
number = 10
print number

  就会出现下面的错误提示:

  UnboundLocalError: local variable 'number' referenced before assignment

  在python2.7 和 python3.4上测试, 出现同样的上述结果.

最新文章

  1. iOS让键盘消失,取消第一响应,取消一级响应
  2. Online, Asynchronous Schema Change in F1
  3. java 中获取2个时间段中所包含的周数(股票的周数->从周六到周五)
  4. July 9th, Week 28th Saturday, 2016
  5. UbuntuLinux安装java
  6. linux上安装apache
  7. for xml path('') 引发的数据不完整
  8. BLE 广播数据解析
  9. Android Studio 打包及引用 aar
  10. SQL学习之高级联结(自联结、自然联结、外联接)
  11. NSDate,NSCalendar
  12. java.lang.NumberFormatException: For input string: " "
  13. IntelliJ IDEA安装scala插件并创建scala示例
  14. keil5 MDK 链接报错 Error: L6410W 解决
  15. JavaScript学习-1
  16. [Bayes] Point --> Line: Estimate "π" by R
  17. linux 关闭笔记本自带键盘
  18. python之udp
  19. C++标准模板库(STL)介绍:set的基本用法
  20. NodeJs学习一NodeJs初识

热门文章

  1. 阻塞赋值与非阻塞赋值(verilog篇)
  2. 383. Ransom Note【easy】
  3. Git使用技巧(3)-- 远程操作
  4. MD5摘要(Java实现)
  5. Data Replication in a Multi-Cloud Environment using Hadoop & Peer-to-Peer technologies
  6. struts.properties文件
  7. python 反射机制 ( 广泛应用于URL参数)
  8. myeclipse中文编码错误,没有GBK选项
  9. ng-model ng-show
  10. PHPCMS 前台移用地区联动数据