python闭包技巧_Python之类方法,lambda,闭包简谈

类方法,lambda,闭包

类方法

类方法

类方法,通过装饰器@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() # 另一种通过实例对象来调用静态方法

类方法,实例方法和静态方法的调用区别

类方法:通过 实例对象和类调用

实例方法: 仅能通过实例对象调用

静态方法:通过类或实例对象调用,不可以直接调用

lambda

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("小小伟")

"""

你好! 小伟

你好! 小小伟

"""

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值