ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python之类方法,lambda,闭包简谈

2019-02-08 21:49:29  阅读:325  来源: 互联网

标签:闭包 __ 调用 Python 简谈 对象 实例 方法 def


类方法,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__test1test2都是实例方法,仅能通过实例对象来调用


静态方法

静态方法如同普通的函数,其调用可以直接通过类、实例对象来调用,不可以直接调用,即直接使用方法名来调用是不可以的。

# 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不断迭代相加,得到数值190python2是可以直接使用,python3其在functools中。


闭包

理解:后面会补充
参考资料

# coding: utf-8


def close(mss):
    def hello(name):
        print(mss, name)
    return hello


h = close("你好!")
h("小伟")
h("小小伟")
"""
你好! 小伟
你好! 小小伟
"""

标签:闭包,__,调用,Python,简谈,对象,实例,方法,def
来源: https://www.cnblogs.com/yuzw/p/10356802.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有