Python基础学习笔记(一)

python是解释型语言

  1. python是顺序执行的,没有静态检查,没有编译链接过程,可以交互式运行
  2. 编译型语言是先编译全部代码,再运行。解释型语言是一条条运行。
  3. 编译型的类型不对,是编译的时候抛出错误,而python是运行时抛出错误

python的优点和缺点

优点:

  1. 解释型语言,简单易懂,可读性强
  2. 有很多库,利于功能实现
  3. 可扩展,和其他语言有可连接的接口
  4. 免费开源,可移植 

缺点:

  1. 解释型语言运行速度慢
  2. 动态语言特点,增加运行时错误 

面向对象和面向过程区别

面向对象:将问题分成各个对象,建立对象来描述解决问题的行为。(优点:易维护,缺点:性能差)

面向对象的三大特性:(类定义了该集合中每个对象所共有的属性和方法,对象就是类的实例)

  • 封装:
  1. 设置private访问权限
  2. 设置get set方法来访问相关属性
  • 继承:
  1. 子类继承父类的属性和方法(对象就是类的实例)
  • 多态
  1. 方法:重写、复写方法
  2. 对象:父类子类之间的转型

面向过程:分析解决问题的步骤,用函数一步步实现,需要使用的时候再调用函数。 (优点:性能好,缺点:需要创建实例开销大)

python实现多线程

  1.  threading包,新建线程
    import time, threading
    # 新线程执行的代码:
    def loop():
        print('%s is running...' % threading.current_thread().name)
        n = 0
        while n < 5:
            n = n + 1
            print('%s >>> %s' % (threading.current_thread().name, n))
            time.sleep(1)
        print('%s ended.' % threading.current_thread().name)
    
    print('%s is running...' % threading.current_thread().name)
    t = threading.Thread(target=loop, name='LoopThread')
    t.start()
    t.join()
    print('%s ended.' % threading.current_thread().name)

    start启动线程,并把需要并行处理的代码放在run中,start启动线程会自动调用run方法
    run实际运行的内容,可以被继承,也可以重写
    join阻塞调用它的进程,直到等待被调用的进程结束,这里阻塞的是mainThread。

  2. 用GIL(全局解释锁)实现线程通信。GIL能保证一次执行一个线程,线程轮流保存GIL,在传给其他线程前执行一些操作,以实现多进程轮流运行,近似并行。 
  3. python的多线程其实是并发的,是交替进行的。保证了数据的原子操作的线程安全

python内存管理

  1.  引用计数:记录对象有多少个引用。创建对象就创建了一个引用计数,引用计数为0时候被垃圾回收
  2. 垃圾回收:检查引用计数为0的对象,清理该对象的内存,循环引用对象就用循环垃圾回收器回收。释放的内存放到了内存池而不是返回给操作系统。
  3. 内存池机制:python运行时会不断申请和释放小块的内存,影响执行效率,引用内存池机制管理小块内存的申请和释放。
  4. 小于256字节的对象用pymalloc分配内存,大对象用系统的malloc。
  5. python的list,int,float...都有其独立的私有内存池。eg:int的内存释放后,float不能使用这块内存

python垃圾回收机制

自动处理分配回收内存的问题:没用了有内存泄漏的隐患

引用计数为主,标记清楚 和 分代收集 两种机制为辅

创建对象就创建了一个引用计数,有引用就增加,删除就减小,引用计数为0时,内存会被垃圾回收

缺点:当A B互相引用,且没有其他对象引用他们,则两段内存永远无法回收

python装饰器

功能:引入日志,函数执行时间统计,执行函数前预备处理,执行函数后清理功能,权限校验,缓存

  • @staticmethod:静态方法(使用此方法不用对类进行实例化)
  • @classmethod:类方法,类在使用时将类本身当作参数传给类方法的第一个参数(使用此方法不用对类进行实例化)
  • @property:将一个实例方法提升为属性,便于访问

深拷贝和浅拷贝和等号赋值

深拷贝 :新建对象B,将原来对象A的内存完全复制到B。修改A,B不会发生改变

浅拷贝:1、简单的可变对象,AB互不影响。2、可变对象内嵌套其他可变对象,A修改了子对象,B的子对象也会变。

等号赋值:B=A,其实A和B指向同一块内存区域,修改A,B也会变。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值