Python的两件小事----函数式编程&类实例

函数式编程语言

纯函数:输出完全依赖输入的函数,不能读写外部变量、没有IO
Python中的相关内置函数
1. map(函数,迭代器)
     将迭代器中的所有内容依次传递给函数,并返回一个迭代器
     可以是list...
     e.g.  map(lamda x: x*2, [1, 2, 3]) => 返回[1, 4, 9]
2.filter(函数,迭代器)
     将函数(迭代器内容)为True的保存到一个迭代器中
     e.g.  filter(lamda x: x % 2 == 1, [1, 2, 3]) =>返回[1, 3]
3.list comprehension
     e.g.  [n for n in list if (n%2) == 1]
一个微积分的例子
def d(f):
     def calc(x):
          dx = 0.0001
          return (f(x + dx) - f(x))/dx
     return calc
f = lamda x: x**2 + 5 * x + 3
求f的导数:f1 = d(f)
求某处的斜率:f1(2)

类的实例

Python中,类也是有实例的。类的实例包含函数和类属性。
设有类A:
//test.py
class A:
     count = 0
     def __init__(self)
          A.count += 1
     def __del__(self)
          A.count -= 1
并且有A的实例a
a = A()
//end
我在Python2.7版本的IDLE中运行以上语句
会发生什么?
对类A,会生成一个实例,在内存中我们叫它 A1
根据 A1,会生成实例a,a指向的对象实例我们叫它 a1
现在A.count 是1,即 A1实例中的count为1
此时如果我们退出程序,a不会被立刻回收因此此时A.count仍然为1,sys.getrefcount(a)仍然为2(还有1为传入参数时增加的)
现在再打开test.py运行一次,会发生什么那?
首先,会生成一个新的A的实例,我们叫它 A2吧, A2的count为0。此时 A1仍然存在
现在运行a = A(),根据 A2生成对象实例,我们称之为 a2a2的建立使内存中新的A的实例 A2.count = 1
此时a指向 a2,所以a1这块内容ref count为0,会调用 A1.__del__
问题来了,为什么此时 A2.count = 0了那?
因为A2.count覆盖了A1实例中的代码A.count,如果将A.count改为self.__class__.count则__del__中仍然修改的时A1.count
是不是很像super?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值