Python里的作用域

2017-12-01  本文已影响41人  W_Honor
timg.jpeg

python里只有全局作用域和局部作用域,因为没有像JAVA那样明显的关键字声明定义,所以新手常常被python解释器搞得稀里糊涂。

    if x>0:
       y = 1
    print(y)

这段代码可以完美运行,因为python中没有块级作用域。

    name = 0
    def x():
        name += 1
        return name
    print(x())

当看到以上这段代码就必须小心了,这里面蕴含着一个陷阱。
因为name是局部变量,在函数里不起作用,系统会发现函数里的name没有定义,所以会报错。

再看一个比较复杂的例子:

  name = 'LOL'
  def x():
        name = 'DOTA' 
        def y():
               name = 'CS:GO'
               print(name)
         y()
   x()

python里有作用链域,变量的值是从内到外找的,所以这里是输出CS:GO

最后看一个比较复杂但相似的:

  name = '火影忍者'
  def f1():
        print(name)
  def f2():
        name = '海贼王'
        f1()
  f2()

函数在没有执行前,变量已经形成了完整的作用链域,就像一条链子串好了。所以执行函数f2(),最后输出的是'火影忍者'。

上一篇下一篇

猜你喜欢

热点阅读