目录
3. 什么是匿名函数。匿名函数一般结合什么一起使用,请列举几个常用的
2.描述下列常见内置函数的作用可用代码说明map,zip,filter,sorted,reduce
3.列举你所知道的面相对象中的__开头__结尾的方法及作用,越多越好
ascii码: 记录的是英文字符与数字的对应关系[a-z 97-122/A-Z 65-90] 一个字节1byte = 8bits
GBK: 国标, 记录了英文,中文与数字的对应关系
unicode: 万国码, 所有的字符都是2bytes起步存储的, 会浪费空间和io时间.
utf8: 是万国码的转换版本, 其内存使用的是unicode, 硬盘使用的是utf8
方式一: m,n = n,m 交叉赋值
方式二: a=m, m=n, n=a 引入第三个变量
浅拷贝:拷贝的程度浅, 只拷贝元数据的首地址,然后通过元数据的首地址去获取内容.
浅拷贝耗时短,占用空间少, 但是拷贝程度低, 但是只是复制了原数据的地址, 所以副本的地址指向的其实还是原来数据的地址, 修改副本内容并不会影响到原来的数据.
深拷贝:拷贝程度深,指的是重新分配一块内存, 将被拷贝的对象全部拷贝过来, 并且将原对象中的元素以递归的方式, 通过创建的子对象拷贝到新对象中, 因此新对象和原对象没有任何关联. 但是耗时长, 占用内存空间.
HTTP协议是超文本传输协议, 作用于应用层上的协议,其特点是灵活(客户端可发送任意类型数据),简单快速(只需要填写简单的请求路径和方法就可以通过浏览器发送请求).
他有四大特性:
1. 基于请求响应
2. 基于TCP/UTP协议之上
3.无状态 >> 不保存用户信息
4.无/短链接 >> 请求回应一次就断开.
请求格式:
1.请求首行(协议名及版本)
2.请求头(K:V键值对)
3.换行
4.请求体(两种)
get请求超服务器索要数据,(可以携带2k的敏感数据,但最好不要)
post向服务器提交数据.
响应格式:
1.响应首行(HTTP协议版本, 响应状态码)
2.响应头(K:V键值对)
3.换行
4.响应体(浏览器展示给用户看的数据)
响应状态码:
1xx:服务器已经接收到了你的数据信息,可以继续提交
2xx: 服务器成功响应
3xx: 重定向到另一个页面
301 永久重定向
302 临时重定向
4xx: 找不到所需的数据(404)或不符合获得数据的条件(403)
5xx: 服务器故障
502 网关错误
503 服务器不可用
form表单用于向服务器传输数据从而实现用户与web服务器交互,它包含input 系列标签,也包含textarea, select, label等
action属性用于控制数据的提交地址, 不写的话就是向当前页面所在的地址提交
method属性 用于控制请求的方式.input系列:
text 输入单行文本
password 输入密码, name=password可以隐藏密码
date 日历
email 邮箱
radio 单选框 >> 多选一要写多次选项
checkbox 多选一
file 单个文件
multiple files 多个文件
button 普通按钮
submit 提交按钮
reset 重置
编译性语言不如解释性语言跨平台性好,也就是说不同平台的兼容性有区别,所以才有了两种语言.
解释型语言: 如python. 每次逐行翻译,可以一边执行一边转换,需要哪些源代码就转换哪些源代码,不会生成可执行程序. 当遇到bug时, 可相对快速的找到,且因为不需要整体翻译, 相对浪费io/cpu工作时间多, 相比于编译型语言,解释型语言几乎都能跨平台,“一次编写,到处运行”是真实存在的, 解释型语言的执行效率天生就低于编译型语言,甚至存在数量级的差距
编译型语言: 如java, c++等, 每次都是整体翻译,必须提前将所有源代码一次性转换成二进制指令,也就是生成一个可执行程序. 当遇到bug时相对不太好找,且因为每次都需要整体翻译, 相对浪费io/cpu工作时间少. 编译型语言一般是不能跨平台的,也就是不能在不同的操作系统之间随意切换。
类型 | 原理 | 优点 | 缺点 |
编译型 | 通过专门的编译器,将所有源代码一次性转换成特定平台执行的机器码 | 编译一次后,脱离了编译器也可以运行,并且运行效率高。 | 可移植性差,不够灵活。 |
解释型 | 由专门的解释器,根据需要将部分源代码临时转换成特定平台的机器码 | 跨平台性好,通过不同的解释器,将相同的源代码解释成不同平台下的机器码。 | 一边执行一边转换,效率很低 |
方法 | pyhon2 | python3 |
range | 结果直接展示在屏幕上, 当数据量过大时,就很浪费屏幕空间,和内存空间. | 结果为一个迭代器, 节省空间, 需要用什么再去取. |
xrange | 有, 结果时一个可迭代对象[类似于python3的range方法 | 无 |
字符编码 | 默认字符编码是ascii码, 需在开头指定字符编码为utf8, 写编码时开头要写u,来达到使用utf8的目的. | 默认使用utf8编码 |
输入 | input默认是整型, str要用引号包裹, raw-input得到的都是str. | input得到的数据都是str类型 |
输出 | print不一定要求函数形式使用, 可以使用print 'hello'的方式输入(print 'hello') | print是强制函数 (print('hello world')) |
整型 | 区分int 和long [长整型] | 不区分[没有long] |
格式化 | 没有f标志位 | 有f格式化, f'my name is {name}' |
异常捕获 | except execption, e: | except exception as e: |
新式类与经典类 | 只有继承了object的类才是新式类, 其他的是经典类 | 默认所有类都是继承的object,所以p3都是新式类. |
匿名函数可以在程序中任何需要的地方使用,但是这个函数只能使用一次,即一次性的。
lambda x:x+1
lambda 是定义函数关键字, x是形参, x+1是返回值
lambda 函数拥有自己的命名空间
不能访问自己参数列表之外或全局命名空间里的参数,只能完成非常简单的功能。
lambda函数可以结合内置函数使用, 如map, sorted, filter,reduce,max等.减少代码.
常见的lambda函数示例:
- lambda x, y: x+y # 函数输入是x和y,输出是它们的和x+y
- lambda:None # 函数没有输入参数,输出是None
- lambda *args: sum(args) # 输入是任意个数参数,输出是它们的和(隐性要求输入参数必须能进行算术运算)
- lambda **kwargs: 6 # 输入是任意键值对参数,输出是6
(1)直接赋给一个变量,然后再调用
- c = lambda x,y,z:x*y*z
- print(c(1,2,3))
- #输出结果为6
(2)在函数后面直接传递实参
- a = (lambda x :x**2)(7)
- print(a)
- #输出结果为49
(3)将lambda函数作为参数传递给其他函数比如说结合map、filter、sorted、reduce等一些Python内置函数使用
max()函数
max() 方法返回给定参数的最大值,参数可以为序列。
- num = [(1, 2.9), (1.5, 3.2), (1.3, 4.0), (2.2, 2.8)]
- y = max(num, key=lambda x: x[0])
- print(y)
- #结果 (2.2, 2.8)
-
- num = [(1, 2.9), (1.5, 3.2), (1.3, 4.0), (2.2, 2.8)]
- y = max(num, key=lambda x: x[1])
- print(y)
- #结果 (1.3, 4.0)
Lambda函数 + map函数
map() 会根据提供的函数对指定序列做映射。
- #提供了两个列表,对相同位置的列表数据进行相加
- a = map(lambda x,y:x+y,[1,2,3],[4,5,6])
- print(list(a))
- #计算列表中各元素的平方和
- pingfang = map(lambda x:x**2,range(5))
- print(list(pingfang))
Lambda函数 + filter函数
filter()用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
- #语法如下
- filter(function,iterable)
- #function--判断函数
- #iterable--可迭代对象
- a = filter(lambda x: x % 2 == 0,range(10))
- print(list(a))
- #采用lambda函数筛选出0-10之间的偶数,将它以列表的形式输出。
- #采用定义函数的方法,筛选出0-10之间的偶数
- def oushu(x):
- if x % 2 == 0:
- return x
- a = filter(oushu,range(10))
- print(list(a))
Lambda函数 + sorted函数
sorted() 函数对所有可迭代的对象进行排序操作。
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
- #语法
- sorted(iterable,key = None,reverse = False)
- """
- 参数说明:
- iterable--可迭代对象
- cmp--比较的函数
- key--主要用来进行比较的元素,只有一个参数
- reverse--排序规则,reverse = True降序,reverse = False升序(默认)
- """
-
- #对列表进行排序,保留原列表
- a = [1,2,6,5,3,8,4]
- b = sorted(a)
- print(b)
- -----------------------------------------
- a = [1,7,8,3,4,1,2]
- b = sorted(a) # 使用sorted,保留原列表,不改变列表a的值
- print(a)
- #结果 [1, 7, 8, 3, 4, 1, 2]
- print(b)
- #结果[1, 1, 2, 3, 4, 7, 8]
- #利用key
- L = [('b',2),('a',1),('c',3),('d',4)]
- new_L = sorted(L,key = lambda x : x[1])
- print(new_L)
- -------------------------------------
- students = [('j', 'A', 15), ('j1', 'B', 12), ('j2', 'B', 10)]
- print(sorted(students, key=lambda s: s[2])) #按第三维s[2]进行排序
- #结果 [('j2', 'B', 10), ('j1', 'B', 12), ('j', 'A', 15)]
-
- L = [11, 5, 0, 6, 1, 2, 7, 3, 4, -3]
- L.sort()
- print(L)
- #结果 [-3, 0, 1, 2, 3, 4, 5, 6, 7, 11]
- a = 4
- print(sorted(L, key=lambda x: abs(x - a))) #按L列表所有元素对a作差的绝对值大小进行对L列表排序,默认升序
- #结果 [4, 3, 5, 2, 6, 1, 7, 0, -3, 11]
-
- print(sorted(L, key = lambda x: abs(x - a), reverse=True)) #此为降序
- #结果[-3, 11, 0, 1, 7, 2, 6, 3, 5, 4]
Lambda函数 + reduce函数
reduce函数会对参数列表中的元素进行累积。
- from functools import *
- sum = 0
- for i in range(1,21):
- a = reduce(lambda x,y: x*y,range(1,i+1))
- sum = a +sum
- print(sum)
-
-
-
-
-
-
-
- from functools import reduce
-
-
- def add(x, y): # 两数相加
- return x + y
- a = reduce(add, [1, 2, 3, 4, 5]) # 计算列表和:1+2+3+4+5
- print(a)
- #结果 15
-
- b = reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
- print(b)
- #结果 15
三次握手建立双向通道:
1.客户端向服务端发送建立链接的请求
2.客户端回复请求,同意建立连接,同时向客户端发送简历链接的请求
3.客户端收到服务端的请求之后,同意建立, 则双方连接成功
四次挥手;
断开双向通道
1.客户端向服务端发送断开连接的请求
2.服务端回复请求,同意断开链接
3.等待服务端给客户端传递的数据全部传送结束,并且同时向客户端发送断开链接
4.客户端收到服务端请求之后同意断开,则双方断开连接
1.基本选择器:
1.标签选择器, 直接编写标签名来查找标签 div
2.元素选择器, p
3.id选择器, 通过编写id的值来精准查找标签 #d1
4.类选择器. 通过编写class的值来查找标签 .c1
5.通用选择器, * 查找所有标签 *
2. 组合选择器
后代选择器 >>> 两个选择器之间空格隔开, 前面的选择器渠道的标签内吧所有符合空格后面的选择器要求的标签 >>>div span
儿子选择器>>> 两个选择器之间用>隔开, 前面的选择器获取到的标签内部第一层符合>后边的选择器要求的标签 >>> div > p
毗邻选择器>>> 两个选择器之间用+隔开, 前面选择器获取的标签下面紧挨着的+后的标签. >>>> div + p
弟弟选择器>>> 查找前面标签同级别下的符合后面的所有标签 >>> #il ~p
3.属性选择器
默认属性 id, class
自定义属性: x, y
1.属性名含有name的标签 >>> [name]
2.属性名含有name并且值为username的标签>>> [name='username']
3.查找input 标签并且属性含有name值为username的标签>> input[name='username']
4.伪类选择器
hover 鼠标悬浮时的样式
5.伪元素选择器
first-litter 首字母设置样式
before >> p元素之前插入内容
after >> p元素之后插入内容 其中befor /after 多用于清除浮动
字符串:
索引取值 >>> [0]
切片操作 >>>> [2:4]
统计字符串个数>>>.len()
移除字符串首尾指定字符>>> .strip()
按照指定字符切割字符串>>>.split()
格式化输出: .format方法>{}类似于占位符>>{变量名}>>>{0}{1}索引>>>>f'{变量名}'
大小写转换: lower()/upper()/islower()/isupper()
拼接字符串>>>+/join
列表:
索引取值 >>>[0]
切片操作>>>[2:4]
统计元素个数>>> .len()
成员运算>>> xx in xx
添加元素>>> .append()/insert()/extend()
删除元素>>> del()/remove()/pop()
统计元素出现次数>>> count()
清空列表>>>.clear()
元组:
索引取值>>>[0]
切片操作>>>[2:4]
统计元素出现的次数>>>.count()
成员运算>>> xx in xx
统计元素个数>>> len()
字典:
按k取值 ?>>>.name()
get 取值方法>>> .get('name')
修改值>>> d['name'] = 'xxx'
统计字典中键值对 >>> len()
删除键值对>>> .pop()
获取键/值/键值对>>> .keys()/.values()/.items()
字典更新>>>update() 键不存在就新增
快速生成字典>>> .fromkeys()
setdefault()>>> 见不存在就新增键值对,键存在就不做修改
内置函数 | 作用 |
map | 使用指定方法取作用传入的每个可迭代对象的元素. 生成新的可迭代对象[同步缩放数据] |
zip | 用于将可迭代的对象作为参数, 将对象中对应的元素打包成一个元组, 然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致, 则返回列表长度与最短的对象相同 |
filter | 过滤,根据条件来筛选数据, |
sorted | 对可迭代对象进行排序操作 |
sort | 对列表进行排序操作 |
reduce | 会对参数序列中的元素进行累积. |
更多参见;python 内置函数_Yietong309的博客-CSDN博客
双下方法 | 作用 |
__getattr__ | 当对象获取一个不存在的属性名的时候自动触发, 该方法返回什么对象获取不存在的属性名就会得到什么, 形参item就是对象想要获取的不存在的属性名 [没找到触发] |
__getattribute__ | 对象获取属性的时候自动触发, 无论这个属性存不存在, 当类中既有__getattr__ 又有__getattribute__的时候只会走后者 [无论找没找到都触发] |
__get__ | 当访问一个属性的时候触发 |
__set__ | 为一个属性赋值时触发 |
__setattr__ | 对象操作属性值得时候自动触发,>>> 对象.属性名= 属性值 |
__del__ | 对象在被删除(主动/被动)得时候自动触发 |
__delattr__ | 删除属性的时候会触发它的执行 |
__call__ | 对象加()调用,自动触发该方法 |
__init__ | 给对象设置都有数据的时候触发(实例化) |
__new__ | 产生空对象, 类是先通过__new__取调用, 在通过__init__去执行 |
__str__ | 对象被执行打印操作的时候自动触发该方法返回一个字符串,返回什么字符串打印对象之后就展示什么字符串 [ print([对象]) 的时候触发 __str__ 的执行] |
__class__ | 可以查看当前操作的对象所属的类 |
__dict__ | 用来查看一个对象或类的名称空间属性,也可以说属性字典 |
__all__ | 用来在使用 from [模块名] import * 的时候, 针对这个 * 来限制能够使用的属性 |
__iter__ | 凡是有此方法的都是可迭代对象 |
__next__ | 可迭代对象取值 |
__enter__ | with上下文管理, 对象被with语法执行的时候会自动触发, 该方法返回什么,as关键字后边的变量名就能得到什么 |
__exit__ | 对象被with语法执行并运行完with子代码之后自动触发 |
参见: 面向对象常用魔法方法(内置方法)合集, 超级无敌宇宙详细_给你骨质唱疏松的博客-CSDN博客_面向对象魔法方法
数值number >>> 不区分整型,浮点型
字符串string>>>只有'',"",``[``是格式化字符串]
布尔值 boolean>>> true/false
null & undefined >> null 空,undefined 一个变量未初始化的时候该变量的默认值 是undfined,
函数无明确返回值的时候也是undefined
对象>>object
数组>>> 类似于列表
symbol