编程范式总结

什么是面向对象编程?
Object Oriented Programming(OOP)

​ 把对象作为基本单元,把对象抽象成类(Class),包含成员和方法
​ 数据封装、继承、多态
​ Python中使用类来实现。过程式编程(函数),OOP(类)

类变量和实例变量的区别
区分类变量和实例变量

​ 类变量由所有实例共享
​ 实例变量由实例单独享有,不同实例之间不影响
​ 当我们需要在一个类的不同实例之间共享变量的时候使用类变量

classmethod/staticmethod区别
classmethod vs staticmethod

​ 都可以通过Class.method()的方式使用
​ classmethod第一个参数是cls,可以引用类变量
​ staticmethod使用起来和普通函数一样,只不过放在类里去组织

什么是元类?使用场景
元类(Meta Class)是创建类的类

​ 元类允许我们控制类的生成,比如修改类的属性等
​ 使用type来定义元类
​ 元类最常见的一个使用场景就是ORM框架

什么是装饰器
Decorator

​ Python中一切皆对象,函数也可以当做参数传递
​ 装饰器是接受函数作为参数,添加功能后返回一个新函数的函数(类)
​ Python中通过@使用装饰器

import time


def log_time(func):
    def _log(*args, **kargs):
        beg = time.time()
        res = func(*args, **kargs)
        print('use time:{}'.format(time.time() - beg))
        return res

    return _log


@log_time  # @装饰器语法糖
def mysleep():
    time.sleep(1)


if __name__ == '__main__':
    mysleep()
    # 去除@log_time
    # newsleep = log_time(mysleep)
    # newsleep()

import time


class LogTime():
    def __call__(self, func):
        def _log(*args, **kargs):
            beg = time.time()
            res = func(*args, **kargs)
            print('use time:{}'.format(time.time() - beg))
            return res

        return _log


@LogTime()
def mysleep():
    time.sleep(1)


if __name__ == '__main__':
    mysleep()

import time


class LogTime():
    def __init__(self, use_int=False):
        self.use_int = use_int

    def __call__(self, func):
        def _log(*args, **kargs):
            beg = time.time()
            res = func(*args, **kargs)
            if self.use_int:
                print('use time:{}'.format(int(time.time() - beg)))
            else:
                print('use time:{}'.format(time.time() - beg))
            return res

        return _log


@LogTime(use_int=True)
def mysleep():
    time.sleep(1)


if __name__ == '__main__':
    mysleep()

设计模式

查看设计模式总结文章

函数式编程
Python支持部分函数式编程特性

​ 把电脑的运算视作数学上的函数计算(lambda演算)
​ 高阶函数: map/reduce/filter
​ 无副作用,相同的参数调用始终产生同样的结果

什么是闭包?
Closure

​ 绑定了外部作用域的变量的函数
​ 即使程序离开外部作用域,如果闭包仍然可见,绑定变量不会销毁
​ 每次运行外部函数都会重新创建闭包
​ 闭包:引用了外部自由变量的函数
​ 自由变量:不在当前函数定义的变量
​ 特性:自由变量会和闭包函数同时存在

from functools import wraps


def cache(func):
    store = {}

    @wraps(func)
    def _(n):
        if n in store:
            print(store[n])
            return store[n]
        else:
            res = func(n)
            store[n] = res
            return res
	
    return _


@cache
def f(n):  # 斐波那契数列
    if n == 0:
        return 0
    if n == 1:
        return 1
    return f(n - 1) + f(n - 2)


if __name__ == '__main__':
    print(f(7))

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值