Python 类就像命名空间。 Python程序默认在全局命名空间中,类体在类命名空间中。 Python 允许将可执行代码放在全局范围内。当Python执行程序时,这些代码就会有机会执行。同样,Python 也允许将可执行代码放在类范围内。当Python执行类定义弯头时,这些代码也会得到执行的机会。
例如,如下程序测试了类命名空间:
class Item:
# 直接在类空间中放置执行性质代码
print('正在定义Item类')
for i in range(10):
if i % 2 == 0 :
print('偶数:', i)
else:
print('奇数:', i)
从上面的代码可以看出,程序将普通的输出语句、循环语句、分支语句直接放在Item类体中是合法的。当程序执行Item类时,会执行Item类命名空间中的这些代码。
从执行效果来看,这些可执行代码放在Python类命名空间和全局空间并没有太大区别。的确,这是因为程序没有定义“成员”(变量或函数),这些代码执行完就结束了,什么都不留下。
但是下面的代码是不同的。以下代码演示了分别在全局空间和类命名空间中定义 lambda 表达式:
global_fn = lambda p: print('执行lambda表达式,p参数: ', p)
class Category:
cate_fn = lambda p: print('执行lambda表达式,p参数: ', p)
# 调用全局范围内的global_fn,为参数p传入参数值
global_fn('fkit') # ①
c = Category()
# 调用类命名空间内的cate_fn,Python自动绑定第一个参数
c.cate_fn() # ②
上面的程序分别在全局空间和类命名空间中定义了两个lambda表达式。定义在全局空间的lambda表达式相当于一个普通的函数,所以程序通过调用一个函数来调用lambda表达式,并为第一个参数显式绑定参数值,如上述程序中的代码①所示。
对于在类命名空间中定义的lambda表达式,相当于在类命名空间中定义了一个函数,而这个函数就成为了一个实例方法,所以程序必须通过调用方法来调用lambda表达式。 Python也会将参数值绑定到方法的第二个参数(相当于self参数),如上述程序中的代码②所示。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python加载dicom图片的方法12/01
- ♥ python配置文件怎么写?11/25
- ♥ 如何在python中打开idle09/16
- ♥ Python中有多少关键字?09/15
- ♥ 如何在python中打开命令行09/26
- ♥ 如何在 mac 上恢复 python11/30
内容反馈