类方法,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. Levenberg–Marquardt algorithm

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGFubWVuZ3dlbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  2. 解决无线网卡 RTL8723BE ubuntu环境下不稳定情况

    jiqing@ThinkPad:~$ lspci | grep -i net 00:19.0 Ethernet controller: Intel Corporation Ethernet Conne ...

  3. [模板]平衡树splay

    气死我了,调了一个下午+两节课,各种大大小小的错误,各种调QAQ,最后总之是调出来了. 其实就是一个双旋操作,然后其他就是左儿子<当前节点<右儿子,剩下就是细节了. 题干: 题目描述 您需 ...

  4. 详细解析Linux scp命令的应用(转载)

    转自:http://os.51cto.com/art/201003/187301.htm Linux scp命令用于Linux之间复制文件和目录,具体如何使用这里好好介绍一下,从本地复制到远程.从远程 ...

  5. Speed Limit

    http://poj.org/problem?id=2017 #include<stdio.h> int main() { int n,mile,hour; ) { ,h = ; whil ...

  6. 数据库mysql原生代码基本操作

    创建表: CREATE TABLE `biao` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '测试表', `createtime` ...

  7. 像素缓冲区对象PBO 记录

    像素缓冲区对象PBO 记录 和所有的缓冲区对象一样,它们都存储在GPU内存中,我们可以访问和填充PBO,方法和其他的缓冲区一样. 当一个PBO被绑定到GL_PIXEL_PACK_BUFFER,任何读取 ...

  8. EF 批量插入,sqlhelper 批量插入

    需添加一个using System.Linq; 引用 public void BulkInsert<T>(string connection, string tableName, ILis ...

  9. 关于java.util.properties的随笔

    public class Propertiesextends Hashtable<Object,Object> Properties 类表示了一个持久的属性集.Properties 可保存 ...

  10. Android通过透明度设置背景变暗

    变暗 WindowManager.LayoutParams lp=getWindow().getAttributes(); lp.alpha=0.3f; getWindow().addFlags(Wi ...