
正文
python函数生命周期 python周期执行
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
如何理解“python中函数是一等公民”?
单纯的理解“python中的函数是一等公民”这句话,可能包含几层意思:
正确的理解是:第1点和第2点,不包含第3点的意思。
python中的函数是一等公民,重点想表述的是: 在python世界人人平等 。
人人平等的世界,至少应该包含两层意思:1. 身份地位平等; 2. 行使的权利平等。
打印结果是:
从上面的打印结果中可以看出:
1.Python 程序中的所有数据都是某个类的实例,因而是一个对象;
2.类本身也是一个对象。int, float, str, list, dict, set, fuction, module, NoneType, object, type等,这些类都是type类的实例,也是一个对象;
3.object类是所有类的基类
4.object是顶级父类
函数function和其他公民一样,他们的都有一个共同的身份:对象 。
在c++和java里,数据是数据,动作是动作,他俩的结合是类(class)。对于python,数据是数据,动作也可以是数据,这个牛逼的数据叫做对象object。
对于函数function来讲,既可以安静的做一个数据,又可以优雅的执行动作。
Python 官方文档里这样解释 对象(object) 的含义:Python 中的对象是对数据的抽象,Python 程序中所有数据都是由对象或者对象间的关系来表示的。每个对象都有各自的编号、类型和值。
两个祖先(a和b)占了相邻的两块内存,一个可以与它的“后代”共用内存,一个却只能让“后代”另立门户;当它们走完自己的生命周期后,b会马上被当垃圾回收,内存地址遗产被剥夺,然而a却形灭而实存,荫庇后世。
Python为这些对象倾斜资源,也就是为某种阶层固化提供了合法性。划分的依据是因为它们比较常用,共用内存就意味着减少开支,提高内存使用效率。
这就是Python有趣的地方了,一面是全体公民,一面是特权种族,组成了看似矛盾的二元对立结构。
参考:
相关问答
Q1: python 函数外面的变量能在里面使用吗?
这涉及到变量的生命周期问题,一般的,在函数里面声明的变量在函数外是不起作用的。
一个比较简单的解决办法是你在函数外就先声明这个变量,声明成全局变量。然后在函数里面进行操作和赋值。
最后就能在函数外获取变量的值了。例如:
123456 x = 0def a(): x = 2if __name__ == '__main__': a() print x
最终x打印出来的结果就是2
Q2: python局部变量与全局变量
(1)局部变量 是在 函数内部定义的变量,只能在函数内部使用
(2)函数执行结束后,函数内部的局部变量,会被系统回收
(3)不同的函数,可以定义相同的名字的局部变量,不会互相影响
示例:
结果:
所谓生命周期就是变量从被创建到被系统回收的过程
(1)局部变量在函数执行时才会被创建
(2)函数执行结束后,局部变量被系统回收
(3)局部变量在生命周期内,可以用来存储函数内部临时使用到的数据
示例:
结果:
示例:
结果:
示例:
结果:
(1)为了避免局部变量和全局变量出现混淆,在定义全局变量时,有些公司会有一些开发要求,例如:全局变量名前加上gl_或者g_的前缀,但不同公司可能不一致;
(2)建议全局变量的命名与局部变量的规则区分开;
Q3: python命名空间是什么
在Python中,所有的名字都存在一个空间中,它们在该空间中存在和被操作——这就是命名空间。它就像一个盒子,每一个变量名字都对应装着一个对象。当查询变量的时候,会从该盒子里面找到相应的对象。
【定义】
名称到对象的映射。命名空间是一个字典的实现,键为变量名,值是变量对应的值。各个命名空间是独立没有关系的,一个命名空间中不能有重名,但是不同的命名空间可以重名而没有任何影响。
相关推荐:《Python教程》
【分类】
python程序执行期间会有2个或3个活动的命名空间(函数调用时有3个,函数调用结束后2个)。按照变量定义的位置,可以划分为以下3类:
Local,局部命名空间,每个函数所拥有的命名空间,记录了函数中定义的所有变量,包括函数的入参、内部定义的局部变量。
Global,全局命名空间,每个模块加载执行时创建的,记录了模块中定义的变量,包括模块中定义的函数、类、其他导入的模块、模块级的变量与常量。
Built-in,python自带的内建命名空间,任何模块均可以访问,放着内置的函数和异常。
【生命周期】
Local(局部命名空间)在函数被调用时才被创建,但函数返回结果或抛出异常时被删除。(每一个递归函数都拥有自己的命名空间)。
Global(全局命名空间)在模块被加载时创建,通常一直保留直到python解释器退出。
Built-in(内建命名空间)在python解释器启动时创建,一直保留直到解释器退出。
各命名空间创建顺序:python解释器启动 -创建内建命名空间 - 加载模块 - 创建全局命名空间 -函数被调用 -创建局部命名空间
各命名空间销毁顺序:函数调用结束 - 销毁函数对应的局部命名空间 - python虚拟机(解释器)退出 -销毁全局命名空间 -销毁内建命名空间
python解释器加载阶段会创建出内建命名空间、模块的全局命名空间,局部命名空间是在运行阶段函数被调用时动态创建出来的,函数调用结束动态的销毁的。
python函数生命周期的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python周期执行、python函数生命周期的信息别忘了在本站进行查找喔。






