七十七天 下载,充气城堡推荐. 乖乖熊,铜矿选矿设备
类方法,通过装饰器@classmethod
来标明,可以通过实例对象或类对象直接调用的方法。
class myclass(object): def __init__(self): pass def imethod(self): pass @classmethod def cmethod(cls): pass
__init__
方法是实例方法,其只在实例化对象的时候才会调用。而类方法cmethod()
则是在实例对象时可以调用,直接用类调用也可以调用。
m = myclass() # __init__ 初始化方法调用 myclass.cmethod() # 通过类即可调用 类方法 m.cmethod() # 实例对象也可以调用 类方法 m.imethod() # 实例方法仅能对象实例对象调用
实例方法相比于类方法,因为其仅能在通过实例对象来调用,无法直接通过类对象调用,即不加@classmethod
和@staticmethod
的方法
class myclass(object): def __init__(self): pass def test1(self): pass def test2(self): pass
上面demo中__init__
、test1
、test2
都是实例方法,仅能通过实例对象来调用
静态方法如同普通的函数,其调用可以直接通过类、实例对象来调用,不可以直接调用,即直接使用方法名来调用是不可以的。
# coding: utf-8 class myclass(object): def __init__(self): pass @staticmethod def smethod1(): pass def test(): self.smethod1() if __name__ == '__main__': myclass.smethod1() # 通过类对象来调用 m = myclass() m.smethod1() # 通过实例对象来调用 m.test() # 另一种通过实例对象来调用静态方法
类方法,实例方法和静态方法的调用区别
from functools import reduce def myadd(x, y): return x+y mlist = list(map(lambda x: x**2, [i for i in range(20)])) flist = list(filter(lambda x: (x%3) == 0, [i for i in range(20)])) r = reduce(myadd, [i for i in range(20)]) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361] print(mlist) # [0, 3, 6, 9, 12, 15, 18] print(flist) # 190 print(r)
lambda
匿名函数,其短小精悍,现写现用,不用另外编写一个函数。如上所示
map
返回是一个迭代器,list
负责将生成器转变为列表
filter
返回的是一个生成迭代器,其将函数里荷合条件的数据拿出来,换成map
执行以上代码,将返回bool
值
reduce
返回也是一个迭代器,在这个例子中,数据在myadd
不断迭代相加,得到数值190
。python2
是可以直接使用,python3
其在functools
中。
理解:后面会补充
# coding: utf-8 def close(mss): def hello(name): print(mss, name) return hello h = close("你好!") h("小伟") h("小小伟") """ 你好! 小伟 你好! 小小伟 """
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
python求numpy中array按列非零元素的平均值案例
网友评论