zoukankan      html  css  js  c++  java
  • 基础知识

    1. 对象分类

      可更改:list、dict、set

      不可更改:strings、tuples、numbers、

    2. python自省

      自动获得对象的类型,比如:type、dir、getattr、hasattr、isinstance

    3. 列表-字典推导式

      字典推导式:d = {k: v for k, v in dic} 

    4. 单双下划线

      单:指定私有变量

      双:区别和其他类相同的命名,访问:对象名._类名_***

    5. 迭代器和生成器

      迭代器:列表生成式;数据结构:列表;占用大量内存空间;

      生成器:数据结构:生成器;边循环,边计算;

    6. 装饰器

      抽离出大量函数中与函数功能本身无关的雷同代码并继续重用;为已经存在的对象添加额外的功能;

      适用:插入日志、性能测试、事务处理等

    7. 新式类和旧式类

      新式类:继承依据C3

      旧式类:深度优先

    8. 单例模式

      保证系统中一个类只有一个实例且该实例易于外界访问,方便地控制实例的个数并节约系统资源。

      8.1 __new__方法

    1 class Singleton(object):
    2     def __new__(cls, *args, **kw):
    3         if not hasattr(cls, '_instance'):
    4             orig = super(Singleton, cls)
    5             cls._instance = orig.__new__(cls, *args, **kw)
    6         return cls._instance
    7 
    8 class MyClass(Singleton):
    9     a = 1

      8.2 共享属性-所有实例的__dict__指向同一个字典

    1 class Borg(object):
    2     _state = {}
    3     def __new__(cls, *args, **kw):
    4         ob = super(Borg, cls).__new__(cls, *args, **kw)
    5         ob.__dict__ = cls._state
    6         return ob
    7 
    8 class MyClass2(Borg):
    9     a = 1

      8.3 装饰器版本

     1 def singleton(cls):
     2     instances = {}
     3     def getinstance(*args, **kw):
     4         if cls not in instances:
     5             instances[cls] = cls(*args, **kw)
     6         return instances[cls]
     7     return getinstance
     8 
     9 @singleton
    10 class MyClass:
    11   ...

      8.4 import

     1 # mysingleton.py
     2 class My_Singleton(object):
     3     def foo(self):
     4         pass
     5 
     6 my_singleton = My_Singleton()
     7 
     8 # to use
     9 from mysingleton import my_singleton
    10 
    11 my_singleton.foo()

    9. GIL

      线程全局锁:为了保证线程安全而采取的独立线程运行的限制。

      IO密集型:多线程

      CPU密集型:多线程的优势不大,会因争夺资源而变慢

      解释多线程为什么慢:https://www.oschina.net/translate/pythons-hardest-problem

    10. 协程

      用户自己控制切换的时机,不需要陷入系统的内核态。比如:yield

    11. 函数式编程 + lambda

      filter:过滤

      map:对一个序列的每一项一次执行函数

      reduce:对一个序列的每一项迭代调用函数

    12. 拷贝

      浅拷贝:拷贝对象的引用和值,原值修改后新值不会改变外层元素;

      深拷贝:拷贝所有的值,原值修改后不会影响新值;

    13. 垃圾回收

      引用计数:有循环引用的缺点

      标记-清除:按需分配,遍历以对象为节点、引用为边的图,清除没标记的对象;

      分代技术:以空间换时间,索引数越大,对象存活时间越长。

      

      

  • 相关阅读:
    20162302预备作业02
    20162302预备作业01
    设计模式第二次作业
    设计模式第一次作业
    项目选题报告(团队)
    高级软件工程结对第二次作业
    高级软件工程团队第一次作业
    高级软件工程结对第一次作业
    高级软件工程第二次作业
    高级软件工程第一次作业--准备
  • 原文地址:https://www.cnblogs.com/Z-D-/p/12680801.html
Copyright © 2011-2022 走看看