产品生命周期的定义,项目生命周期的定义是什么,产品生命周期的定义,项目生命周期的定义指
第一部分
最近写Python的时候发现一个有趣的现象,就是在if else中重新定义的变量,没有全局声明,也可以对外使用。
这涉及到一个python变量生命周期问题。
可以改变变量范围的Python代码段有def,class,lamda。
If/elif/else,try/except/finally,for/while不能涉及变量作用域的改变。
也就是说,它们代码块中的变量也是外部可访问的。
变量搜索路径是:局部变量-全局变量。
https://img-blog.csdn.net/20161110105647895?watermark/2/text/ahr 0 cdovl 2 jsb 2 cuy 3 nkbi 5 uzxqv/font/5a 6 l5 l 2t/font size/400/fill/i0 jbqkfcma==/dissolve/70/gravity/Center
http://blog.csdn.net/u012965373/article/details/53113586
第二部分
在python中,变量的范围有些不同。在C/C、java等编程语言中。在函数外部定义的全局变量默认情况下可以在函数内部直接访问,但这在python中会有问题。这里有一个例子。
test.py:#!/usr/Dormant Earth/Python Count=1 deffunc():Count=Count 1 Func()Python test . py,运行时将出错:traceback(最近一次调用last): file test.py,第8行,in func() File test.py ,第6行,Func Count=Count 1 unbounded local error:局部变量 Count 在赋值前引用“unbounded local error:local variable Count 在赋值前引用”表示变量Count在赋值前被引用。
在这里你应该知道python和其他编程语言的区别。在C/C这样的编程语言中,变量名实际上是一个内存区域。给变量赋值意味着将新值放入变量指定的内存区域。对于python来说,所有的变量都是对内存区域的引用,给变量赋值相当于把变量引用的内存从一个区域换到另一个存储新值的区域。也就是说,在C/C中,变量名和内存区域的对应关系不会改变,只会改变对应内存中存储的值;然而,在python中,变量仅指存储它们的值的内存区域。变量值的变化不是因为变量所指向的内存区域中的值发生了变化,而是因为变量引用了存储新值的新内存区域。python中的所有变量都相当于java中的不可变变量,值的任何变化都对应着变量引用内存区的变化。区别如下:图1:
图1变量比较
python里有id函数,python里有id函数。帮助(id)可以看到它的描述如下:
模块__builtin__:id(.)id(object) -integer返回一个对象的标识。这在同步存在的对象中保证是唯一的。(提示:这是对象的内存地址。)(完)简单来说,id函数反映的是对象的内存地址。请看下面的实验结果:
test.py:#!/usr/高飞地球/python count=1 for I in range(5):count=count 1 printid(count)python test . py运行结果:11031328110312801103103103103125611031232这与上图一致。Python中的每一次赋值都会改变变量引用的内存空间。
回到上面的“赋值前引用”错误,发生这个错误是因为python在函数中找到了COUNT变量的赋值,并将它添加到函数的本地命名空间中(实际上,这发生在函数运行到赋值操作之前)。在赋值操作过程中,赋值运算符的右边引用了COUNT变量,而此时COUNT变量只是被添加到了函数的局部命名空间中而没有被具体赋值,所以会出现上面的错误。实际上,这里的问题在于赋值操作,因为赋值操作导致变量被添加到函数的局部命名空间中。如果没有赋值,只是引用变量,没有问题,如下:
test.py:#!/usr/goofy earth/python count=1 deffunc():temp=COUNT 1 print temp:,countprint count:,countfunc () pythontest.py运行结果:temp: 1COUNT: 1这样,变量COUNT就不会添加到函数的本地命名空间中,python解释器也不会在函数的本地命名空间中找到它。然后,python解释器将继续在全局名称空间中查找,结果是在全局名称空间中找到了COUNT的定义并引用了它的值,因此程序运行起来没有任何问题。
此时你可能会问,难道不能修改函数中全局变量的值吗?不,如果您想要修改函数中全局变量的值,您应该在函数中对变量进行全局声明,以告知python解释器该变量位于全局名称空间中,如下所示:
test.py:#!/usr/高飞地球/pythoncount=1deffunc():全局计数=count1print count:,countfunc () pythontest.py运行结果:计数:2
历史提交的图片或压缩文件