美文网首页Python小推车Diango
核心知识梳理(四)

核心知识梳理(四)

作者: 暖A暖 | 来源:发表于2019-03-29 14:53 被阅读5次

    Day28:正则表达式

    • 正则表达式(Regular Expression,在代码中可简写为regex、regexp或re)又称规则表达式,是一个特殊的字符序列,通常被用来检索、替换那些匹配某个模式的文本
    • Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式,re 模块使 Python 语言拥有全部的正则表达式功能,其中常用功能函数有:
    1.match函数用于检测字符串开头位置是否匹配,匹配成功返回一个匹配的对,否则返回None,
      它的语法为re.match(pattern, string, flags=0),pattern表示匹配的正则表达式,
      string表示要匹配的字符串,flags用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等
    
    2.search函数用于扫描整个字符串并返回第一个成功的匹配,
      它的语法为re.search(pattern, string, flags=0),它的参数和match函数的一样,不同在于re.match只匹配字符串的开始,
      如果字符串的开始不匹配则直接返回None;而re.search则匹配整个字符串,直到找到一个匹配的
    
    3.sub函数用于替换字符串中的匹配项,
      语法为re.sub(pattern, repl, string, count=0, flags=0),repl 表示替换的字符串,
      也可为一个函数,string 表示 要被查找替换的原始字符串,count表示模式匹配后替换的最大次数,
      默认 0 表示替换所有的匹配
    
    4.compile函数用于编译正则表达式,生成一个正则表达式对象,
      供 match() 和 search() 这两个函数使用,语法为re.compile(pattern[, flags]),
      pattern表示一个字符串形式的正则表达式,flags可选表示匹配模式,比如忽略大小写,多行模式等
    
    • 正则表达式可以包含普通或者特殊字符,大部分普通字符都是最简单的正则表达式,还有一些特殊字符可以拥有其他的功能,比如
    .表示匹配除了换行的任意字符
    ^匹配字符串的开头
    $匹配字符串的末尾
    *重复匹配0到任意次
    +匹配1到任意次
    ?重复匹配0次或1次
    {m}匹配n次
    {m, n}匹配m 到 n 次等
    这些特殊字符有很多,慢慢用熟练了就容易记住了
    

    Day29:面向对象(一)

    • 是用来描述具有相同的属性和方法的对象的集合,它定义了该集合中每个对象所共有的属性和方法,创建一个类的语法如下:
    class 类的名称:
      语句块
    
    • 对象是通过类定义的数据结构实例,包括两个数据成员分别是变量和方法
    • 实例是根据类创建出来的一个个具体的对象,每个对象都拥有相同的方法,但各自的属性可能不同;类名加括号就是实例化,实例化会自动调用init方法,如xkd = XKD()就是一个实例化,而其中的XKD就是一个类
    • 变量分为类变量实例变量,类变量在整个实例化的对象中是公用的,实例变量就是定义在类里面的方法中的变量,简单来说实例变量是实例特有的,类变量是类和实例共有的
    • 方法就是类中定义的函数,分为实例方法静态方法类方法
    1.实例方法是在类中定义的方法,并且方法的第一个参数一般是self,
      指向对象本身,使用的时候只能通过实例化的对象调用,对象名称.方法名
    
    2.静态方法也是定义在类中,不同的是在类中定义静态方法时要在方法前加注解
      @staticmethod,静态方法可以被实例对象和类对象调用
    
    3.类方法同样是定义在类中,定义类方法时要在方法前加注解@classmethod,
      方法中的第一个参数为类本身,约定写成cls,类方法可以被实例对象和类对象调用
    
    • 类的属性可以分为共有属性、私有属性和保护属性
    1.在类中定义的,所属这个类的所有对象都可以访问的属性,叫做公有属性
    
    2.两个下划线开头的属性表示私有属性,私有属性不能在类的外部被使用或直接访问,
      在类的内部方法的使用为self.__private_attrs
    
    3.一个下划线开头的属性为保护属性,只有类实例和子类实例能访问,
      需通过类提供的接口进行访问
    

    Day30:面向对象(二)

    • 继承即一个派生类(derived class)继承基类(base class)的字段和方法,继承可以很方便的帮助子类拥有父类的属性和方法,减少代码冗余,子类可以定义自己的方法和属性,也可以覆盖父类的方法和属性

    • 继承分为实现继承和接口继承,实现继承指使用基类的属性和方法而无需额外编码的能力,接口继承指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构父类方法)

    比如此时有两个类, 一个是Animal类、一个是Person类,
    Person类继承Animal类中的方法和属性,那就是说Animal类是父类(基类),Person类是子类(派生类)
    
    class Animal:    
      def __init__(self):      
       self.type = 'animal'  
    
      def play(self):        
        print('play')class
    
    Person(Animal):    
      def talk(self):        
        print('talk')
    
    person = Person()
    person.play() # 子类可以调用父类的方法
    print(person.type) # 子类可以调用父类的属性
    
    • 在继承中,属性的查找顺序是:先从对象自身的dict中查找->然后从对象所在类的dict中查找->然后从父类的dict中查找, 如果没有找到,会报AttributeError的错误
    • 如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写,方法重写后,默认调用子类的方法
    • Mixin是一种设计模式,通过多继承的方式对类的功能进行增强,作用是可以在不修改任何源代码的情况下,对已有类进行扩展,既可以根据需要使用已有的功能进行组合,来实现“新”类,还能很好的避免类继承的局限性,因为新的业务需要可能就需要创建新的子类
    在Mixin类中,不能写初始化的__init__方法,因为Mixin类不做为独立类使用,
    因为Mixin类原则上必须作为其他类的基类,实现其他类的功能增强
    
    Mixin类的基类必须也是Mixin类,使用Mixin方式增强功能的的类,
    必须将Mixin类写在继承列表的第一个位置
    

    Day31:魔术方法

    • 魔术方法就是在我们定义的类中定义一些”不一般”的方法,使类的使用更方便、完善、健壮,是python特有的方法,一般用前后__包含,例如new
    init()方法是一个初始化方法,在一个实例被创建之后调用
    
    new()方法用于创建类并返回这个类的实例,总是在初始化方法被执行前执行
    
    del()相当于C++的析构函数,在对象要被销毁前执行
    
    repr()用来自定义对象的输出模式
    
    iter()、next()通常是成对出现的,用来创建用户自定义的迭代器
    
    call()方法允许一个类的实例像函数一样被调用如:x(a, b)调用为 x.call(a, b)
    
    add()、sub()、mul()、truediv()等方法是运算符相关的魔术方法,实现了加减乘除等运算
    

    Day32:上下文管理器

    • 上下文管理器是一个包装任意代码块的对象,上下文管理器保证进入上下文管理器时,每次代码执行的一致性,当退出上下文管理器时,相关的资源会被正确的回收,且一定能够保证退出步骤的执行

    • 实现上下文管理器有两种方式,一个是通过类实现__enter____exit__方法,也就是通过with语句进行上下文管理

    with语法为:with 表达式 [as 目标]:代码块
    
    __enter__(self)在 进入上下文管理器时调用,其返回值将被放入with-as语句中as说明符指定的变量中
    
    __exit__(self,type,value,tb)方法在离开上下文管理器时调用,
    如果有异常出现,type、value、tb分别为异常的类型、值和追踪信息,
    如果没有异常3个参数均设为None,它的返回值为True时,表示被引发的异常得到了处理,反则亦然
    
    • 还有一种是通过contextlib模块装饰器和生成器实现上下文管理
    contextlib模块是Python标准库提供的更加易用的上下文管理器工具模块,
    它是通过装饰器实现的,不需要再创建类以及使用__enter__和__exit__这两个
    方法,比with语句更加方便
    
    contextlib模块包含一个装饰器contextmanager和一些辅助函数,
    装饰器contextmanager只需要写一个生成器函数就可以代替自定义的上下文管理器
    

    Day33:反射

    • 解释类型的语言,在程序被加载到内存运行的时候,可以通过某种方式获取对象的类型、属性等信息的过程叫做反射

    • 具有反射能力的内置函数有:getattr函数用于判断对象是否有对应的属性,语法为getattr(object,name[,default]),object表示对象,name表示对象属性,default表示默认返回值,如果不提供该参数,在没有对应属性时,将触发AttrbuteError

    • setattr() 函数对应函数getattr(),用于设置属性值,若属性不存在则先创建然后赋值,语法为setattr(object, name, value),object表示对象,name表示属性,value表示属性值

    • hasattr函数用于判断对象是否包含对应的属性,返回Bool值,语法为hasattr(object,name),object表示对象,name表示属性名(字符串)

    • delattr() 函数用来删除指定对象的指定名称的属性,和setattr函数作用相反,属性必须存在,否则发出AttributeError,语法为delattr(object, name),object表示对象,name表示属性名(字符串)

    来自:https://www.9xkd.com/user/plan.html

    相关文章

      网友评论

        本文标题:核心知识梳理(四)

        本文链接:https://www.haomeiwen.com/subject/npdlbqtx.html