python variable video_Python Variable Scope

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

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

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

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

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

示例如下:

defaccessOut():print(outVar)

outVar= 10accessOut()

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

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

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

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

#!/usr/bin/python2.7#File: demo.py#Author: lxw#Time: 2014-09-01

number= 5

deffunc0():#It's OK to reference.

printnumberdeffunc1():#new local variable.

number = 10

printnumberdeffunc2():#global declaration.

globalnumberprintnumber

number= 10

printnumberprint "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, numberis 5Calling func0()----------

5Calling func1()----------

10After calling func1(), numberis 5Calling func2()----------

5

10After calling func2(), numberis 10

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

deffunc1():#new local variable.

printnumber

number= 10

print number

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

UnboundLocalError: local variable 'number' referenced before assignment

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值