python的函数、方法、闭包的作用

和scala一样,python也区分函数和方法。

function和method:

(1)在python中,函数是一个独立、执行语句的一个整体,是可以直接调用的。而方法无法单独存在,需要依附于对象object而存在。也就是说,方法是写在class中的,调用method必须通过class的object才行。

(2)方法其实是一种特殊函数,写在class中,属于object的一种函数。

(3)“bound method”说明当前method是绑定到object上。

 

什么是闭包:

在一个function内部使用function外部的变量,或者在class的method使用当前method外部的变量,使得当前function和methos将外部变量包裹进来,形成一种封闭区域,这种特性简称闭包。(和scala的柯里化currying操作一致)

闭包的作用:

(1)实现操作的延迟计算。

(2)对相同操作共享部分变量。

(3)实现python的装饰器作用。(函数的返回值是一个函数,这个函数和输入函数一致)。

 

柯里化和反柯里化:柯里化将具有多个参数的一个函数拆分为包装的嵌套函数,第一个函数(包含第一个参数)的返回值仍是一个函数(其他参数)。反柯里化就是逆过程。

 

python语法层面的装饰器和设计模式中的装饰器:

(1)python语法层面的装饰器是一种python的特殊设计,使用@符号实现在不修改原函数的前提下增加新的功能。

(2)设计模式中的装饰器思想类似,在不修改当前object的前提下,给当前object新增新的功能。

 

鸭子类型Duck typing:

在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由【继承自特定的类或实现特定的接口】,而是由"当前方法"【方法和属性的集合】"决定

鸭子测试

当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。

 

python是一种动态语言,有别于静态语言(Java、C++)中的继承和多态(继承时对父类的method覆盖写)性质,在静态语言中,使用一个变量或者object需要提前知晓类型,类型不一致则无法使用。而python作为动态语言则关心是方法和属性本身,而不关心当前object的类型。

将一个object传递给python函数时候,可以不关心object的类型,只需要object具有一个同名函数即可。

class FF1(object):

     def run():

         pass

class FF2(object):

     def run():

         pass

 

def UU(ff):

     ff.run()

对于UU函数,不论对象ff何种类型,只需要ff包含run方法即可。这种编程思想即是鸭子类型。

在鸭子类型的编程中,程序的正确性依据:【依赖文档、清晰的代码和测试】,而不是function或者method的参数类型。

 

未完待续~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值