python 命名空间 作用域,python 变量空间
Python的类就像名称空间。Python程序默认在全局命名空间中,类主体在类命名空间中。Python允许将可执行代码放在全局范围内,当Python执行程序时,这些代码将获得执行的机会。类似地,Python也允许将可执行代码放在类的范围内。当Python执行类的定义时,代码也会得到执行的机会。
例如,下面的程序测试类命名空间:
类别项目:
#将执行属性代码直接放在类空间中
打印(“定义项目分类”)
(10):
ifi%2==0:
打印(偶数: ,I)
else:
Print(奇数: ,I)从上面的代码可以看出,程序直接把普通的output语句、loop语句、branch语句放在Item类体中,都是合法的。当程序执行Item类时,将执行Item类的命名空间中的所有代码。
从执行效果来看,Python类命名空间和全局空间的这些可执行代码没有太大区别。的确,这是因为程序没有定义“成员”(变量或函数),这些代码执行完了就完事了,什么都没留下。
但是下面的代码是不同的。以下代码分别演示了全局空间和类命名空间中lambda表达式的定义:
Global _ fn=lambdap3360print(执行lambda表达式,p参数: ,p)
类别:
Cate _ fn=lambdap3360print(执行lambda表达式,p参数: ,p)
#在全局范围内调用global_fn,并为参数p传入参数值。
global_fn(fkit)#
c=类别()
#调用类命名空间中的cate_fn,Python自动绑定第一个参数。
C.cate_fn()#上面的程序分别在全局空间和类命名空间定义了两个lambda表达式,全局空间定义的lambda表达式相当于一个普通函数。因此,程序通过调用函数来调用lambda表达式,并为第一个参数显式绑定参数值,如上面程序中的代码所示。
对于在类命名空间中定义的lambda表达式,相当于在类命名空间中定义了一个函数,函数变成了实例方法。所以程序必须通过调用方法来调用lambda表达式,Python也会为方法的第二个参数(相当于self参数)绑定参数值,如上面程序中的代码所示。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。