前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >易错易忘点

易错易忘点

作者头像
nbsp-nbsp
发布2020-01-15 10:26:25
1.1K0
发布2020-01-15 10:26:25
举报
文章被收录于专栏:博客-txy

目录

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

1、python2与python3的区别

代码语言:javascript
复制
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、装饰器

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

3、多线程、多进程

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

4、GIL

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

5、OSI七层协议

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

6、HTTP协议

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

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

7、垃圾回收机制

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

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

8、进制转换

代码语言:javascript
复制
bin()  # 将十进制转换成二进制
oct()  # 将十进制转换成八进制
hex()  # 将十进制进制转换成十六进制
int(value,num)  # 将num进制的value转换成十进制

9、eval与exec的区别

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

eval(code2)  # 报错
exec(code2)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、python2与python3的区别
  • 2、装饰器
  • 3、多线程、多进程
  • 4、GIL
  • 5、OSI七层协议
  • 6、HTTP协议
  • 7、垃圾回收机制
  • 8、进制转换
  • 9、eval与exec的区别
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档