类方法,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之类方法,lambda,闭包简谈的更多相关文章

  1. 以python为例讲解闭包机制

    以python为例讲解闭包机制 缘起 在学习JS的过程中,总是无可避免的接触到闭包机制,尤其是接触到react后,其函数式的编程思想更是将闭包发扬光大,作为函数式编程的重要语法结构,python自然也 ...

  2. Day 7 :一句话Python(匿名函数-lambda,三元运算,列表表达式,生成器表达式)

    注意: 1.所有的列表表达式都可以转换成生成器表达式 2.经量让标傲世简化你得操作,增加代码可读性 3.如果代码过于复杂,应该转换成普通代码 4.再代码中尽可能多使用生成器表达式. 三元运算符:简化代 ...

  3. 【转】python中的lambda函数

    http://www.cnblogs.com/coderzh/archive/2010/04/30/python-cookbook-lambda.html lambda函数也叫匿名函数,即,函数没有具 ...

  4. python练习_购物车(简版)

    python练习_购物车(简版) 需求: 写一个python购物车可以输入用户初始化金额 可以打印商品,且用户输入编号,即可购买商品 购物时计算用户余额,是否可以购买物品 退出结算时打印购物小票 以下 ...

  5. Python魔法方法总结及注意事项

    1.何为魔法方法: Python中,一定要区分开函数和方法的含义: 1.函数:类外部定义的,跟类没有直接关系的:形式: def func(*argv): 2.方法:class内部定义的函数(对象的方法 ...

  6. Python系列之lambda、函数、序列化

    lambda 在python中使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢? 1 python la ...

  7. Python的方法和语法解释

    ---------------------------------------------------------------------------------------------------- ...

  8. Python 嵌套函数和闭包

    Python 嵌套函数和闭包 1.函数嵌套 如果在一个函数内部定义了另一个函数,我们称外部的函数为外函数,内部的函数为内函数,如下代码: def out_func(): def inner_func1 ...

  9. .NET简谈——跨进高级编程门槛的必经之路

    我们继续C#基础知识的学习,这篇文章对前面基础知识学习的朋友有着举足轻重的作用:为了延续基础知识学习的热情,我编写了这篇特殊的文章. 本篇文章的中心是想借“.NET简谈反射(动态调用)”一文继续发挥下 ...

随机推荐

  1. param size: The requested size, in points.

    param size: The requested size, in points. 字幕宽度的自适应 . fontScale c++ - OpenCV find the text Scale fro ...

  2. Android App调用MediaRecorder实现录音功能的实例【转】

    本文转载自:http://www.jb51.net/article/82281.htm 这篇文章主要介绍了Android App调用MediaRecorder实现录音功能的实例,MediaRecord ...

  3. Bing Maps进阶系列六:使用Silverlight剪切(Clip)特性实现Bing Maps的迷你小地图

    Bing Maps进阶系列六:使用Silverlight剪切(Clip)特性实现Bing Maps的迷你小地图 Bing Maps Silverlight Control虽然为我们提供了简洁.方面的开 ...

  4. Appium + python -yaml配置文件

    在线安装:pip install yaml import yamlimport os # 获取当前脚本所在文件夹路径curpath = os.path.dirname(os.path.realpath ...

  5. Appium + python - weixin公众号操作

    from appium import webdriverfrom time import sleep desired_caps = { "platformName":"A ...

  6. Java的Thread.currentThread().getName() 和 this.getName() 以及 对象.getName()区别???

    最近在看Java多线程这本书,但是发现里面有个概念自己搞不清楚.就是Thread.currentThread().getName() 和 this.getName() 以及 对象.getName()区 ...

  7. Sorting It All Out 拓扑排序+确定点

    这一道题的话  数据有一点问题    ........     例如 不过 还是   能理解一下  试试吧  ......... A<B B<C C<A A<C B<A ...

  8. Android 使用 Application 简单介绍

    Application 配置全局Context 第一步.写一个全局的单例模式的MyApplication继承自Application 覆盖onCreate ,在这个方法里面实例化Application ...

  9. 2CSS层叠规则(即引入CSS的三种不同方式的优先级)

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  10. 诡异之--map clear 之后可能导致size != 0的操作

    map<char, int>mp; charMp[; charMp['b'] ++; cout<<charMp['a']<<endl; cout<<ch ...