1.可变参数*args
和关键字参数**kwargs
参数前的*和**
*args
可以表示在调用函数时从迭代器中取出位置参数, 也可以表示在定义函数时接收额外的位置参数。多出来的当列表。
**kwargs 表示字典和键值对的 **
,表示的是值。多出来的赋值类型当字典
def func(a,b,*c,**d)
func(1,2,3,4,5,6,x=1,y=2) 相当于a=1,b=2,c=[3,4,5,6],d={x:1,y:2}
2.正则表达式的[ ]里面的^是非的意思
3.常见的错误类型
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件ImportError 无法引入模块或包;基本上是路径问题或名称错误IndentationError 语法错误(的子类) ;代码没有正确对齐IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]KeyError 试图访问字典里不存在的键KeyboardInterrupt Ctrl+C被按下NameError 使用一个还未被赋予对象的变量SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)TypeError 传入对象类型与要求的不符合UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它ValueError 传入一个调用者不期望的值,即使值的类型是正确的4.Python2默认的编码解码方式是ascii码,这个与第五条可以连起来看,就是说头部声明为 coding:ascii。python3中就是默认为utf-8.
5. 在程序头部声明 coding:utf-8 ,是让程序在保存的时候或者在读取的时候,使用utf-8进行理解,读取和存储。但是程序自己在运行的时候,是遵循本身的规则的,头部声明不会影响程序内部的实际数据类型。
6. Python2 中,str类型的实质就是bytes类型,所以可以decode(utf-8)来转换为Unicode,但是不可以encode()。Unicode类型的本质就是Unicode。
python3中,bytes类型的实质才是bytes类型,str类型的本质变成了Unicode。所以这里的str只能够encode()。
7,编码解码方式的含义,比如utf-8或者gbk等等,这些都是计算机读取理解程序文字的方法,不会影响程序内部实际的数据类型。
8. socket 的方法里面。socket.send()和socket.recv()都是只能发送bytes类型的数据。同时连续socket.send()会出现粘包的可能性。即服务器端你调用时send 2次,但你send调用时,数据其实并没有立刻被发送给客户端,而是放到了系统的socket发送缓冲区里,等缓冲区满了、或者数据等待超时了,数据才会被send到客户端,这样就把好几次的小数据拼成一个大数据,统一发送到客户端。
但是在通过连续发送的时候,中间插入一次socket.recv(),由于recv(),缓冲区里面的数据被全部发送,从而避免粘包的出现。
9.同时获取列表的序号和内容(enumerate,前面是序号,后面是内容):
for index, line in enumerate(test):
if index == 9:
print('The 10th line is:', line) 10.socketserver模块就是socket模块的封装。
11. 同步执行——就是串行;异步执行——就是并行
12.脚本中目录前面加上r是为了,r是保持字符串原始值的意思,就是说不对其中的符号进行转义。
13.while 0相对于while False;while 1相当于 while Ture,所以啊,可以用这个形式来表示随机:while randint(0,1):