zoukankan      html  css  js  c++  java
  • 零基础学python-16.1 作用域快速入门

    这一章节我们来聊聊作用域基础

    python在创建、改变或者查找变量都是在所谓的命名空间中进行,作用域指的就是命名空间

    简单的说:就是这个变量可以被访问的范围

    我们举一个比较容易理解的例子--函数

    >>> def test():
    	x=1
    	print(x)
    
    	
    >>> x
    Traceback (most recent call last):
      File "<pyshell#10>", line 1, in <module>
        x
    NameError: name 'x' is not defined
    >>> test.x
    Traceback (most recent call last):
      File "<pyshell#11>", line 1, in <module>
        test.x
    AttributeError: 'function' object has no attribute 'x'
    >>> 

    我们在函数里面定义了一个变量x,但是在函数外面,x是不能被调用,也不能用test.x来调用,因为x的作用域只是在函数test里面,在外面是不能够被调用

    因此:当我们调用test()的时候,它里面的print是可以打印,而在外面调用是不可以的

    >>> def test():
    	x=1
    	print(x)
    
    	
    >>> test()
    1
    >>> 

    而且,我们在函数外面定义一个跟x同名的变量,跟里面的不冲突,因为它们根本就是指向两个不同的对象,即便我们在里面再定义一个x,也是不冲突,因为也是指向不一样的对象,这里需要注意:由于python的缓存机制,在某些特定的时候,函数里面的x跟外面的x是指向同一个对象

    >>> def test():
    	x=1
    	print(id(x))
    	x='abc'
    	print(id(x))
    	x='a b c'
    	print(id(x))
    	print(x)
    
    	
    >>> test()
    505991632
    12231040
    31921280
    a b c
    >>> x=1
    >>> id(x)
    505991632
    >>> x='abc'
    >>> id(x)
    12231040
    >>> x='a b c'
    >>> id(x)
    31921408
    >>> 

    从代码里面我们可以看见,对于整数1和短字符串abc,它们在python里面是做了缓存的,python里面的x指向的是同一个对象,而对于长字符串a b c,由于没有缓存机制,所以,它指向不同的对象,其实我们在项目当中更多的是遇到第三种情况,但是我们必须留意第一二种情况, 因为他可能带给我们一些坑,看不见的坑,而且是查不出来的坑,因此在这里大家必须注意python的缓存机制

    三种不同的作用域:

    * 如果变量在def里面赋值,它被定位在这个函数里面

    >>> def test():
    	x=1


    * 如果一个变量在一个嵌套的def中赋值,对于嵌套的函数来说,它是非本地的

    >>> def test1():
    	x=2
    	def test2():
    		x=3
    		print(x)
    	test2()
    	print(x)
    
    	
    >>> test1()
    3
    2
    >>> 


    * 如果在def之外赋值,它是全局的

    >>> x=1


    总结:这一章节我们简单讲述了作用域的基础,作用域的特殊情况,以及python的三种作用域


    这一章节就说到这里,谢谢大家

    ------------------------------------------------------------------

    点击跳转零基础学python-目录




    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    【C#进阶系列】06 类型和成员基础
    纪中5日T1 1564. 旅游
    纪中17日T1 2321. 方程
    纪中17日T2 2322. capacitor
    纪中10日T1 2313. 动态仙人掌
    纪中14日听课小结 图论 最短路 二分图 差分约束
    一个抓猫的游戏 消遣GAME 持续更新中!
    洛谷P1464 Function  HDU P1579 Function Run Fun
    洛谷P1976 鸡蛋饼
    纪中12日T1 2307. 选择
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4896741.html
Copyright © 2011-2022 走看看