总结(2)--- 小知识点总结(基础知识、网络编程知识)
基础知识
Python 基础(小知识点总结)
1、Python中是如何实现list和tuple之间的转换的
可以使用内置函数直接转换
list ---> tuple tuple(list)
tuple ---> list list(tuple)
2、Python 中pass语句的作用
pass 语句不就执行任何操作,一般作为占位符或者创建站位程序
3、input()函数的理解
在Python3中, input()获取用户输入,不论用户输入的是什么,获取到的都是字符串
在Python2中,raw_input() 和input(), raw_put() 和Python3 中的input()作用是一样的,input()输入的是什么类型的,获取到的就是什么类型的
4、写出一段Python代码实现删除一个list里面的重复元素
方法一 使用map的fromkeys来自动过滤重复值
a = [1,2,3,4,2,1,4,5,6]
b = {}
b = b.fromkeys(a)
print(b)
# 输出{1: None, 2: None, 3: None, 4:None,5: None, 6: None}
a = list(b.keys())
print(a)
# 输出 [1,2,3,4,5,6]
方法二 利用set(),set定义是定义集合的,无序,不重复。
a = [1,2,4,2,4,4,5,2]
# set是非重复的,无序集合。 可以用set先进行去重 ,list()转化成列表,a.sort来排序
a = list(set(a))
print(a)
# 输出 [1,2,4,5]
5、在linux中find 和 grep 的区别
linux 系统中grep命令是一个强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来
grep全程是Global Regular Expression Print ,表示全局正则表达式版本,它 使用权限是所有用户
而linux下的find
功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大
语法:find起始实目录 寻找条件 操作
说明:find 命令从之低昂的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取想换的操作
简单的说, grep是查找匹配条件的行,find是搜索匹配条件的文件。
6、re模块中的search() 和 match()的区别
match()函数值检测RE是不是在string的开始位置匹配
search()会扫描整个string查找匹配
也就是说match() 只有在0 位置匹配成功的话才有返回
如果不是开始位置匹配成功的话,match()就返回none
7、什么是lambda函数,有什么好处
lambda 函数是一个可以接受任意多个参数并且返回单个表达式值的函数
1、lambda 函数比较轻便,很适合需要完成一项功能,但是此功能只在此一处使用,连名字都很随意的情况下
2、匿名函数,一般用来给filter,map这样的函数式编程服务
3、作为回调函数,传递给某些应该,比如消息处理
8、Python的参数传递是值传递还是引用传递
Python的参数传递有:位置参数、默认参数、可变参数、关键字参数
函数的传值到底是值传递还是引用传递,要分情况:
不可变参数用值传递
像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变对象
可变参数是引用传递
比如像列表,字典这样的对象是通过引用传递、和c语言里的用指针传递数组很相似,可变对象能在函数内部改变
9、面向对象的理解
面向对象是相当于面向过程而言的。面向过程语言是一种基于功能分析的、以算法为中心的程序设计方法,而面向对象是一种基于结构分析的、以数据为中心的程序设计思想,在面向对象语言中有一个很重要的概念,叫做类
面向对象有三大特征:封装、继承、多态
10、交换俩个变量的值
a, b = b, a
11、函数装饰器有什么作用,并举出实例
装饰器本质上是一个Python函数,它可以在让其他函数在不需要做任何代码的变动的前提下增加额外的的功能。
装饰器的返回值也是一个函数的对象,它经常用于有其切面需求的场景
比如:插入日志、性能测试、事务处理、缓存、权限的校验等场景
有了装饰器就可以抽离大量的与函数功能本身无关的雷同代码并发并继续使用
12、迭代器和生成器函数的区别
- 迭代器是一个更抽象的概念对象,任何对象,如果它的类有next方法和iter方法返回自己本身,对于string、list、dict、tuple、等这类容器对象,使用for循环遍历是很方便的。 在后台for语句对容器对象调用iter()函数,iter()是Python的内置函数。iter()会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是Python的内置函数。贼没有后续元素时,next(0会抛出一个Stoplteration异常
- 生成器(Generator)是创建迭代器的简单而强大的工具。他们写起来就想是正规的函数,只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置
- 区别:生成器能做到迭代器能做的所有事情,而且因为自动创建了iter()和next()方法,生成器显得特别简洁,而生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存程序状态的自动方法,当发生终结时,还会自动抛出异常
13、Python中闭包的理解
在函数内部再定义函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之闭包。返回的是内部函数的引用
网络编程相关知识
1、简述TCP和UDP的区别以及优缺点
UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息
优点:UDP速度快、操作简单、要求系统资源较少,由于通讯不需要连接,可以实现广播发送
缺点:UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否正确接收,也不重复发送,不可靠
TCP是面向连接的通讯协议,通过三次握手建立连接,通讯完成是四次挥手
优点: TCP在数据传递时,有确认、窗口、重传、阻塞等控制机制,能保证数据正确性,较为可靠。
缺点: TCP相对UDP速度慢一点,要求系统资源较多
2、简述浏览器通过WSGI请求动态资源的过程
- 发送HTTP请求动态资源给web服务器
- web服务器收到请求后通过WSGI调用一个属性给应用程序框架
- 应用程序框架通过引用WSGI调用web服务器的方法 ,设置返回状态和返回头信息
- 调用后返回,此时web服务器保存刚刚设置的信息
- 应用程序查询数据库,生成动态页面的body的信息
- 把生成的body信息返回给web服务器
- web服务器把数据返回给浏览器
3、描述用浏览器访问www.baidu.com的过程
先要解析出baidu.com对应的IP地址
- 要先是使用arp获取默认网关的mac地址
- 组织数据发送给默认网关(IP还是dns服务器的IP,但是mac地址是默认网关的mac地址)
- 默认网关拥有转发数据的能力,把数据妆发给路由器
- 路由器根据自己的路由协议,来选择一个合适的较快的路径转发数据给目的网关
- 目的网关(dns服务器所在的网关),吧数据转发给dns服务器
- dns服务器查询解析出baidu.com对应IP地址,并原路返回请求这个域名的client
得到了baidu.com对应的IP地址之后,会发送TCP的3次握手,进行连接
- 使用HTTP协议发送请求数据给web服务器
- web服务器接受请求之后,通过查询自己的服务器得到相应的结果,原路返回给浏览器
- 浏览器接受到数据之后通过浏览器自己的渲染功能来显示这个网页
- 浏览器关闭tcp连接,即4次挥手结束,完成整个访问过程