专栏首页博客-txy易错易忘点

易错易忘点

目录

  • 1、python2与python3的区别
  • 2、装饰器
  • 3、多线程、多进程
  • 4、GIL
  • 5、OSI七层协议
  • 6、HTTP协议
  • 7、垃圾回收机制
  • 8、进制转换
  • 9、eval与exec的区别

1、python2与python3的区别

1、默认字符编码
python2:ascii
python3: utf-8
    
2、print
python2:
    1、打印时可加括号,也可不加
    2、打印一个值,输出无括号
    3、打印多个值,若打印时加了括号,输出也有括号,并且有逗号分隔,即元组形式
    4、打印多个值,若打印时没加括号,输出也没括号,并且没有逗号分隔,与python3一致
    5、python3中,打印时必须要加括号
3、input
    1、python2中有两种打印语句:input和rawinput
    2、python2中input接收用户输入时,需要指定数据类型,input接收的就是该类型的数据
    3、python2中rawinput接收用户输入时,不需要指定类型,全部接收为字符串
    4、python3中只有input,不需要指定类型,全部接收为字符串
4、字符串
    1、py2中:unicode类型表示字符串序列,str表示字节序列
    2、py3中str表示字符串序列,byte类型表示字节序列
5、global与nonlocal
    1、py3中新增了关键字nonlocal,声明变量为多层嵌套函数整个局部

2、装饰器

1、本质是闭包函数
2、使用闭包的思想,生成一个新的同名函数,不同的名称空间
3、不改变源代码,不改变调用方式
4、新的名称空间中,在执行真正的原函数代码之前,必须执行添加额代码块,可以是判断,可以是新增的功能
4、使用新的同名函数,不会改变调用方式,并且真正的函数代码没有改变

3、多线程、多进程

IO密集型使用多线程编程
计算密集型使用多进程编程
使用线程池、进程池设定最大线程、进程数量
使用互斥锁保证数据安全,即数据完整和数据同步

4、GIL

1、全局解释器锁,本质是线程互斥锁
2、每个进程内都有一把
3、由于进程内线程共享全局资源,为了保证共享数据的完整性和状态同步,GIL使得同一时间只有一个线程能够访问共享数据

5、OSI七层协议

应用层 HTTP,FTP,NFS
表示层 Telnet,SNMP
会话层 SMTP,DNS
传输层 TCP,UDP
网络层 IP,ICMP,ARP
数据链路层   Ethernet,PPP,SLIP,FDDI
物理层 IEEE 802.1A,IEEE 8O2.11

6、HTTP协议

作用
    超文本传输协议,规定了传输数据的数据格式
四大特征
    1、基于TCP/IP作用于应用层之上的协议
    2、基于请求响应
    3、无状态:服务器不保留客户端的任何状态,降低服务器的记忆负担,提高响应速度
    4、无连接:每次连接只处理一个请求,响应完成,即断开连接,大大降低了www服务器的执行效率
    (长连接:可以保持连接,连续发送多个数据包,当没有数据时,需要双方发送链路检测包)

数据格式
    1、请求格式
        请求首行(请求方式,协议版本)
        请求头
        \r\n
        请求体
    2、响应格式 
        响应首行
        响应头
        \r\n
        响应体
         
数字编码
    将文字信息对应成数字编号,便于传输和编程,自定义对应关系
    1**:服务端成功受到请求,正在处理,客户端可以继续提交其他数据
    2**:服务端成功响应了数据
    3**:重定向
    4**:客户端错误,如404请求资源不存在,403当前不符合某一些条件,拒绝访问
    5**:服务器内部错误

7、垃圾回收机制

存储机制:
    栈区:存储变量名和变量值内存地址关联关系
    堆区:存储变量值
    内存管理回收的是堆区的内容

1、引用计数
    变量值引用计数为0,变量值所占的内存会被释放
2、标记清除
    循环引用:
        1、容器对象包含其他对象,存储的只是其他对象的内存地址,添加引用而已
        2、循环引用指的就是容器对象互相包含,即互相引用了,那么当栈区变量名与内存关联被删除后,它们的值存储了对方的引用,即引用计数不为0,然后又跟其他的任何对象不产生关联。
        3、容器对象,如列表,字典,元组,集合,类等都可以包含其他对象的引用,都可能产生循环引用问题
    标记清除:
        1、使用GC算法
        2、标记:遍历所有的GC Roots对象(栈区中的所有内容或者线程),将所有GC Roots对象能直接或者间接访问到的d对象标记为存活状态,其余的均为非存活状态,应该被清除
        3、清除:遍历堆中所有的对象,将没有标记的对象全部清除
2、分代回收
    背景:基于引用计数的回收机制,每次回收内存,都需要把所有对象的引用计数都遍历一遍,非常耗时
    分代:指的是根据变量在多次扫描后,都没有被回收的变量,gc机制将其扫描频率降低,这样多次分级之后,大大减少了遍历的变量个数,节省了时间
    回收:依然是,引用计数为0就回收内存

8、进制转换

bin()  # 将十进制转换成二进制
oct()  # 将十进制转换成八进制
hex()  # 将十进制进制转换成十六进制
int(value,num)  # 将num进制的value转换成十进制

9、eval与exec的区别

''''
相同点:将字符串的引号去掉,执行里面的代码
不同点:eval不能识别逻辑代码
'''
# 例如:
code1 = "print('hello')"
code2 = "for i in range(10):print(i)"
eval(code1)
exec(code2)
'''
hello
hello
'''

eval(code2)  # 报错
exec(code2)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Vue—前端框架

    3、在外部可以通过vue对象名.属性的方式获取属性值,在vue对象内部,通过this.属性的方式获取属性值

    nbsp-nbsp
  • GoLang基础—变量、数据类型、常量

    变量指定了某存储单元的名称,该存储单元会存储特定类型的值。在go中,有多种语法用于声明变量

    nbsp-nbsp
  • django-restframework框架

    nbsp-nbsp
  • 垃圾回收器如何处理循环引用

    垃圾回收是一门编程语言中必不可少的一部分,不论是手动释放内存的C和C++,还是自动回收垃圾的Java和C#等语言。对于Java这样的语言,一般的开发者不强求关心...

    技术小黑屋
  • 什么样的对象需要被 GC ?

    上一篇文章 JVM 基本介绍 我们了解了一些基本的 JVM 知识,本篇开始逐步学习垃圾回收,我们都知道既然叫垃圾回收,那回收的就应该是垃圾,可是我们怎么知道哪些...

    周三不加班
  • Java强引用、软引用、弱引用及虚引用深入探讨

    引用类型在日常开发中并不常关注,也很少注意到,因此很多人忽略了它们的存在,而事实上,引用类型在Java体系中扮演着十分重要的角色,要想对Java体系有一个更深层...

    弗兰克的猫
  • JVM&GC之java引用

    Java中的引用有点像C++中的指针,通过引用可以对堆中的对象进行操作。在Java程序中最常见的引用类型是强引用,也是默认的引用类型。当在Java语言中使用Ne...

    一觉睡到小时候
  • Java 引用类型简述

    tomas家的小拨浪鼓
  • AS3 内存回收机制

           AS3相对于以前版本的功能增强了很多,在赋予它重任时,同时也要它付出代价:垃圾收集器不再支持自动为你收集垃圾。本文中,我为大家整理了一些资料。首先...

    py3study
  • 图解 Java 垃圾回收机制,写得非常好!

    自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。

    用户5224393

扫码关注云+社区

领取腾讯云代金券