zoukankan      html  css  js  c++  java
  • python笔记24(回顾、复习)

    一、内容回顾

    面向对象

    类变量
    方法
    :静态方法
    :类方法
    :绑定方法
    :属性property
    

    单例模块

    单例模块:设计模式

    单例的应用场景

    __new__(self):实例创建,在init之前工作
    

    logging模块

    • 记录日志的

    • 记录错误、操作日志

    • 给程序员看的:①统计使用;②用来做故障排除的(debug);③记录错误,完成优化代码的。

    • logging.basicconig:①使用方便,②不能实现,编码问题;不能同时向文件和屏幕上输出。

    • logging.debug,logging.warning

    • logger对象:

      复杂:
      ①创建一个logger对象;
      ②创建一个文件操作符;
      ③创建一个屏幕操作符;
      ④创建一个格式;
      给logger对象绑定文件操作符
      给logger对象绑定屏幕操作符
      给文件操作符设定格式
      给屏幕操作符设定格式
      用logger对象来操作。
      import logging
      logger=logging.getLogger()
      fh=logging.FileHandler('log.log')
      sh=logging.StreamHandler()
      logger.addHandler(fh)
      logger.addHandler(sh)
      formatter=logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
      sh.setFormatter(formatter)
      fh.setFormatter(formatter)
      logger.warning('message')
      

    collections模块

    from collections import OrderedDict
    odic=OrderedDict([('a',1),('b',2),('c',3)])
    print(odic)
    # # odic['k']='k1'
    # # odic['k1']='k2'
    for k,v in odic.items():
        print(k,v)
    
    #模块namedtuple
    #创建一个类,这个类没有办法,所有属性的值都不能修改
    from collections import namedtuple
    Course=namedtuple('course',['name','price','teacher'])
    python=Course('python',1980,'lexm')
    print(python)
    print(python.name)
    =======================
    course(name='python', price=1980, teacher='lexm')
    python
    
    ====
    只读属性:t属性不能修改
    import time
    t=time.localtime()
    print(t)
    

    项目开发规范

    补充

    • 栈:Stack,先进先出,lifo
    • 队列:Queue,先进先出是队列,fifo

    反射

    hasattr
    setattr
    getattr
    class A:
        @staticmethod
        def func():
            print('12345')
        
    getattr(A,)
    delattr
    

    通过对象来获取实例变量、绑定方法

    通过类 来获取类变量,类方法、静态方法

    通过模块名来获取模块中的任意变量(普通变量,函数,类)

    通过文本件来获取本文件中的任意变量。

    getttr(sys.modules[__name__],'变量名')
    

    抽象类/接口类

    就是给子类一个规范,让子类必须按照抽象类的规范实现方法。

    class Foo:
        def func(self):
            raise NotImplementedError
    
     class Son(Foo):
        pass
    
    s=Son()
    s.func()
    

    模块和包

    模块:py文件写好了的,对程序员直接提供某方面功能的文件。

    import,from import

    什么是包:

    文件夹,存储多个py文件的文件夹。

    如果导入的是一个包的化,这个包里的模块默认是不能用的。

    需要完成__init__.py文件的内容。

    导入一包相当于执行init.py文件中的内容。

    项目规范

    bin  start
    #import os,sys
    #base_path=os.path.dirname(os.path.dirname(__file__))#当前文件
    #sys.path.append(base_path)
    #from src import core
    conf  setting
    src  业务逻辑
    student.py
    from src import core
    core.py
    from conf import settings
    db  数据文件
    lib  扩展文件
    log  日志文件
    

    模块总结

    os:操作系统(作业:计算文件夹大小,考虑绝对路径)
    os.path.getsize('d:codes21')
    #文件
    #文件
    #路径
    #listdir,walk
    
    sys
    #sys.path 模块搜索路径,一个模块是否能被导入,全看sys.path中是否有这个模块所在的路径。
    #sys.argv,获取命令行参数,python c://aaa.py remove 文件路径
    #sys.module,存储了当前程序中用到的所有模块,反射文件中内容。
    json,支持所有语言
    #序列化,将其他类型转换成str/bytes类型
    #json格式:
    #1所有的字符串都是双引号
    #2最外层只能是列表或者字典
    #3只支持int float str list dict bool
    #4存在字典的key只能是str
    #5不能连续load多次
    pickle,只支持py
    #1所有的数据类型都可以写到文件中
    #2支持连续load多次
    random(作业,发红包,没一个人抢到金额概率一样,共计200元,小数的不准确性(print(random.uniform(1,5)))
    import random
    random.choice([1,2,3,4])#随机抽取一个
    random.sample([1,2,3,4,5],3)#抽取多个
    #randint
    #choice
    #sample                                                
    #shuffle,洗牌,算法
    
    time
    #time时间戳
    #sleep()让程序暂停ns
    hashlib(作业,检验文件的一致性,文件,视频,图片)
    #md5
    #sha
    #import hashlib
    #hashlib.md5('xxl'.encode())--如果使用sha算法时,将此处md5改成sha
    #md5.update('str'.encode())
    #print(md5.hexdigest())
    
    datetime
    from datetime import datetime
    dt=datetime.now()
    print(datetime.timestamp(dt))
    #now()
    #utc()
    #strftime('%Y-%m-%d')获取到一个datetime对象
    #timedelta(days=140),时间的加
    #fromtimestamp(时间戳)时间戳转datetime
    #timestamp(datetime对象),datetime转时间戳
    pickle
    shutil
    #import
    shutil.make_archive()压缩文件,shutil.unpack_archive()解压文件,shutil.retree()删除目录,shutil.move(),移动文件
    
    #importlib
    #import importlib
    #importlib.import_module('模块名')
    #print(os.path.isdir('xxx')),判断是否为目录,isfile,是否为文件                                                
    copy
    getpass,在命令行密文显示
                                                    
    copy
                                                    
    logging
    #两种配置方式:basicconfig,logger
     collections
     #OderdDict,namedtuple,deque,defaultDict
      functools
     #reduce(add,iterable)                                               
                                                    
                                                    
                                                    
    
    

    面向对象

    三大特性:封装,继承,多态
    #封装:
    ①广义的封装:类中的成员
    ②狭义的封装:私有成员,__名字,只有在类的内部使用,类的外部不能调用。
    #继承,所有的查找名字(调用方法和属性)都是先找自己,自己没有找父类
    #如果自己和父类都有,希望自己和父类都调用,super()指定类名直接调用
    ①父类,基类,超类
    ②派生类,子类
    ③多继承,查找顺序,深度优先,广度优先
    ④单继承,子类可以使用父类的方法
    #多态
    -一个类表现出来的多种状态,多个类表现出相似的状态
    -user类,用户类
    -vip_user
    -svip_user
    ①鸭子类型
    #vip_user,svip_user
    #list,tuple
    基础概念:
    #什么是类:具有相同方法和属性的一类事物
    #什么是对象,实例:一个拥有具体属性值和动作的具体个体
    #实例化:从一个类得到一个具体对象的过程
    #实例
    #实例化
    组合:
    #一个类的对象作为另一个类对象的实例变量
    类成员:类变量,绑定方法,
    特殊成员:类方法classmethod
    静态方法:staticmethod
    属性:property
    
    特殊成员
    双下方法,魔术方法,内置方法
    #__str__
    __new__,构造方法
    __init__,初始化方法
    __dict__
    __call__,对象加括号就能使用
    __enter__,__exit__,with上下文管理
    __getitem__
    __setitem__
    __delitem__
    __add__,两个对象相加
    __iter__
    __dict__
    
    相关内置函数:isinstance,对象和类
    issubclass,类和类
    type,类型,类=type(对象)
    super遵循mro顺序查找上一个类的
    
    新式类和经典类:
    py2继承object就是新式类
    #默认是经典类
    py3都是新式类,默认继承object
    
    新式类:
    #继承object
    支持super
    多继承,广度优先
    mro方法
    
    经典类:
    #py2中不继承object
    #没有super语法
    #多继承深度优先
    没有mro方法
    
    
    
  • 相关阅读:
    【原】csv文件导入MySQL数据库的实践
    【原】两个时间相加的运算符重载实现
    【转】趣味题:"Hello,world"的输出
    【转】WordPress源码解读(3)
    轻松记住大端小端的含义(附对大端和小端的解释)
    《编程精粹》书摘与读书笔记
    malloc/free函数的简单实现及思考
    如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
    Essential C++学习笔记备忘
    Linux中随手可得的测试、调试、性能检验工具
  • 原文地址:https://www.cnblogs.com/cuiyongchao007/p/12424220.html
Copyright © 2011-2022 走看看