关于Python中控制块中声明的变量被直接在块外使用的说明

活动地址:CSDN21天学习挑战赛

Python中控制块声明变量在块外被使用


笔者学习的第一门编程语言是 C,这是一门静态编译型语言。后来接触了Python。Python简单易学,属于动态语言。所以,由于第一语言的影响,很多时候,自己编写代码时,思维会偏向于静态语言。这里说一下作用域的问题,主要讲 PythonC的差异。对于Python初学者,也可以了解一下。

先从一个例子入手,看看你如何回答下面这个问题。

a = 0
if a == 0 :
    b = 1
print(b)

请你回答一下,上面这段代码的结果是什么?或者具体一点,回答一下,上面的代码是否能够正常运行?

首先说一下结果:这段代码是能够正常运行的。

如果你回答会报错,变量b没有声明,那么可能你和笔者犯了同样的错误。

Python是一门动态语言

对于大多数静态语言,其变量检查都是在编译阶段完成。Python属于动态语言,它并不会在编译阶段去检查变量,而是运行时检查变量。也就是说,对于Python,变量是否声明或者定义过,需要运行到该变量的使用处时,才能够判别。

此外,在C语言中,声明一个整形变量使用语句int a,对其初始化a = 0。而在Python中,声明变量是隐式的,所谓隐式就是不用你自己去声明变量,只需要管变量赋值就够了。

隐式声明是在你第一次使用某个未曾出现的变量(标识符)时,由解释器自动执行的。所以Python声明和初始化是同时进行的

控制块的块级作用域不存在

Python变量在其出现的函数模块)范围内都是可以被使用的。

对于像for,if,while,with等这样的控制块,在其中声明的变量作用域能够延伸到当前控制块之外。(就好像这个控制块的作用域限制不存在一样)

几个例子加深理解

对于这个小的语言特性,笔者没有搜到权威的解释。所以就给几个例子加深理解,同时会用就行。

好了,上面给出的代码还有一些变种。来看看吧。

a = 1
if a == 0 :
    b = 1
print(b)

现在再来回答一下结果吧。注意这段代码与最初给出的代码的区别。

首先,还是结果:运行失败,抛出异常。

NameError: name 'b' is not defined

为什么呢?主要是这里的if语句,a==0结果为False,不会执行b=1这条语句,那么也就不会声明并初始化变量b

来试试其他的控制块

  • for

    • for i in range(5):
          pass
      print(i)
      
    • 结果为4,所以,for循环的控制块中声明的变量也可以在块外使用

  • while

    • while True :
          i = 0
          if i ==0 :
              break
      print(i)
      
    • 结果为0

参考资料

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值