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("小小伟")
"""
你好! 小伟
你好! 小小伟
"""
Python之类方法,lambda,闭包简谈的更多相关文章
- 以python为例讲解闭包机制
以python为例讲解闭包机制 缘起 在学习JS的过程中,总是无可避免的接触到闭包机制,尤其是接触到react后,其函数式的编程思想更是将闭包发扬光大,作为函数式编程的重要语法结构,python自然也 ...
- Day 7 :一句话Python(匿名函数-lambda,三元运算,列表表达式,生成器表达式)
注意: 1.所有的列表表达式都可以转换成生成器表达式 2.经量让标傲世简化你得操作,增加代码可读性 3.如果代码过于复杂,应该转换成普通代码 4.再代码中尽可能多使用生成器表达式. 三元运算符:简化代 ...
- 【转】python中的lambda函数
http://www.cnblogs.com/coderzh/archive/2010/04/30/python-cookbook-lambda.html lambda函数也叫匿名函数,即,函数没有具 ...
- python练习_购物车(简版)
python练习_购物车(简版) 需求: 写一个python购物车可以输入用户初始化金额 可以打印商品,且用户输入编号,即可购买商品 购物时计算用户余额,是否可以购买物品 退出结算时打印购物小票 以下 ...
- Python魔法方法总结及注意事项
1.何为魔法方法: Python中,一定要区分开函数和方法的含义: 1.函数:类外部定义的,跟类没有直接关系的:形式: def func(*argv): 2.方法:class内部定义的函数(对象的方法 ...
- Python系列之lambda、函数、序列化
lambda 在python中使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢? 1 python la ...
- Python的方法和语法解释
---------------------------------------------------------------------------------------------------- ...
- Python 嵌套函数和闭包
Python 嵌套函数和闭包 1.函数嵌套 如果在一个函数内部定义了另一个函数,我们称外部的函数为外函数,内部的函数为内函数,如下代码: def out_func(): def inner_func1 ...
- .NET简谈——跨进高级编程门槛的必经之路
我们继续C#基础知识的学习,这篇文章对前面基础知识学习的朋友有着举足轻重的作用:为了延续基础知识学习的热情,我编写了这篇特殊的文章. 本篇文章的中心是想借“.NET简谈反射(动态调用)”一文继续发挥下 ...
随机推荐
- JDBC高级特性(一)结果集,批量更新
一.ResultSet的高级特性 1 可滚动ResultSet 1)向前和向后滚动 滚动特性 在JDBC初期版本号中, ResultSet仅能向前滚动 在JDBC兴许版本号中, ResultSet默认 ...
- 【CodeForces】166'E
166’E Tetrahedron You are given a tetrahedron. Let’s mark its vertices with letters A, B, C and D co ...
- C#在WinForm中使用WebKit传递js对象实现与网页交互的方法
这篇文章主要介绍了C#在WinForm中使用WebKit传递js对象实现与网页交互的方法,涉及针对WebBroswer控件及WebKit控件的相关使用技巧,需要的朋友可以参考下 本文实例讲述了C#在W ...
- MSP430:中断简介
(5).中断应用程序举例(外部中断): void interrupt_initial() { P1DIR&=~BIT7; //P1.7为输入 P1IE|=0x80; //P ...
- 【高德地图API】VS2012或者VS2013添加高德地图v2.1.1版本SDK失败
可能由于v2.1.1版本SDK可能是在Win8.1环境下编译[这里有许多的原因,系统升级,安装VS2013等等] 有童鞋在操作正常的情况下添加SDK失败,提示版本不兼容. 如下图: 编辑项目 *.c ...
- Linux扩展正则表达式
1. 扩展正则表达式 1.1 +(加号) + 表示前一个字符出现1次或1次以上 1.1.1 理解+ 要求:取出文件内容连续出现的小写字母 [root@oldboyedu50-lnb /oldboy]# ...
- ognl表达式注意事项
1.在jsp页面中: <s:a action="departmentAction_delete.action?did="></s:a> 说明: 1.st ...
- php字符串读取函数
function cc_msubstr($str, $length, $start=0, $charset="utf-8", $suffix=true){ if(function_ ...
- Java 中数组的遍历方式
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java 语言中提供的数组是用来存储固定大小的同类型元素. 今天我们就来说一下在java中遍历数组都有哪几 ...
- Netty编解码技术和UDP实现
背景 作为网络传输框架,免不了传输对象,对象在传输之前就要序列化,这个序列化的过程就是编码过程.接收到编码后的数据就需要解码,还原传输的数据. 编解码技术就是java序列化技术,序列化的目的有两个,一 ...