python 的提高









































#三范式
    1.一个数据一个字段
    2. 只要有主键的
    3. 减少重复


#GIL
    叫什么:全局解释器锁cpython
    有什么用:单核的情况下实现多任务NB
    怎么解决:
        换解释器锁jpython
        进程加协程(个人建议)
        线程用其他语言实现,python调用
        
        
#深拷贝与浅拷贝
    
#深拷贝
    递归拷贝每一层的数据

#浅拷贝
    拷贝第一层的数据

#跟引用的区别
    引用:多个变量指向同一个内存地址
    拷贝:产生一个新地址(不可变类型不会产生,int,字符串,元组)
    
#python基本上如果提供了copy方法都是浅copy


    
    
#私有化
    _x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问
    __xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)
    __xx__:双前后下划线,用户名字空间的魔法对象或属性。例如:__init__ , __ 不要自己发明这样的名字
    xx_:单后置下划线,用于避免与Python关键词的冲突
    
#模块搜索路径
    sys.path
    
#模块更新
    from imp import reload
    
#导入两种模块方式的区别
    import **** 这个可以当做是引用
    from **** import *** 这个可以当做深拷贝







#多态

    1. python有多态,但是不是一个严谨的多态,因为Python是一个动态语言,没有强制类型;
       父类能工作的地方,子类都能工作,并且不同的子类能产生不同的执行的效果 
#封装
    一个函数一个功能,一个类是多个相关函数的集合
#继承
    子类中相同的方法会放到父类中,减少代码重复性
    
#mro 及多继承
    mro类初始化顺序表,保持我们的类只初始化一次
    super()从mro顺序表中找到自已的位置,从mro顺序表中调用下一个类
    
class person(object):
    def __init__(self):
        print("person 的init 开始调用")

class son1(person):
    def __init__(self):
        print("son1 的 init 开始调用")
        super().__init__()

class son2(person):

    def __init__(self):
        print("son2 的 init 开始调用")
        super().__init__()

class grandson(son1,son2):
    def __init__(self):
        print("grandson 的 init开始被调用")
        super().__init__()  # super 是调用mro顺序中下一个类

gg=grandson()
print(grandson.__mro__)   #  类初始化的顺序

#实例与类之间的调用关系
    实例可以调用三种类型的方法(静态,类,实例),可以调用类的属性及自我的属性
    类可以调用三种类型的方法(静态,类,实例),但是不能调用实例上的属性
class A(object):
    num = 100

    def __init__(self):
        self.age=18
        print("init")

    @classmethod
    def get_name(cls):
        print("get_name")

    @staticmethod
    def get_age():
        print("get_age")

a = A()
a.__init__()
a.get_name()
a.get_age()
                    # 实例对象和类对象都可以调用 实例方法,类方法, 静态方法
A.__init__(a)
A.get_name()
A.get_age()

print(a.num)                   #   实例和类都可以访问 类属性
print(A.num)

print(a.age)                   #  实例可以访问实例属性,类不能访问实例属性
print(A.age)


#property
    1. 完成常量,常量是能得到到数据,但是不能修改数据,一般常量都是大写
    2. 代码实现
        这个常量一般在init中创建一个私有的属性
        提供一个得到这个私有属性的方法,但是我们为了让常量更直观,在方法上加入装饰器@property
        调用就可以使用(类名.方法名)
class A:

    def __init__(self):
        self.__name  ="皮皮虾"

    @property
    def get_name(self):
        return  self.__name


a = A()
print(a.get_name)       #   常量这个不能让别人修改的值

#魔法属性与方法
    __dict__:查看属性
    __class__:查看谁创建了我
    
    __init__:初始化
    __new__:创建时,一般单例
    __call__:实例()调用
    

# 上下文管理器
    只要实现了__init__ ,__enter__,__exit__这三个方法就可以说实现了上下文管理器
    1.简化了代码
    2.程序退出时自动关闭
    3.操作时出现异常也会自动关闭
    
    with myopen() as f:
        pass
    myopen()这个调用__init__方法
    as 后面的f由__enter__这个方法返回
    程序执行完后退出我们会执行__exit__,一般用来关闭资源

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值