美文网首页
Python里的作用域

Python里的作用域

作者: W_Honor | 来源:发表于2017-12-01 21:10 被阅读41次
    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(),最后输出的是'火影忍者'。

    相关文章

      网友评论

          本文标题:Python里的作用域

          本文链接:https://www.haomeiwen.com/subject/ykxgbxtx.html