Python的类就像命名空间。python程序默认处于全局空间内,类体则处于类命名空间内,Python允许在全局范围内放置可执行代码——当Python执行该程序时,这些代码就会获得执行的机会,同时Python同样会允许在类范围内放置可执行代码,Python执行该类的定义时,这些代码同样会获得执行的机会。
class Item:
print("正在定义Item类")
for i in range(10):
for i%2==0:
print("偶数",i)
else:
print("奇数",i)
这些类内代码和在全局空间执行并没有太大区别,因为程序中没有定义“成员”(变量或者函数),这些代码执行结束,不会留下什么
下面代码示范了在全局空间和类命名空间内分别定义的Lambda表达式
global_fn = lambda p: print("执行1_lambda表达式,参数p:", p)
class Category:
cate_fn = lambda p: print("执行类内——lambda表达式,参数p:", p)
global_fn("filet")
c = Category()
c.cate_fn()
执行结果为:
执行1_lambda表达式,参数p: filet
执行类内——lambda表达式,参数p: <__main__.Category object at 0x0000022E906D1C18>
在全局空间内定义的lambda表达式,相当于一个普通函数,因此程序用调用函数的方式来调用该lambda表达式,并显式的为第一个参数绑定参数值,
而对于在类命名空间内定义的lambda表达式,则相当于在该类命名空间调用该表达式,python会为该方法的第一个参数(相当于self)自动绑定参数值,其实是其内存地址。