Python学习——小知识点

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):

 



posted @ 2018-02-18 17:30  Ian_learning  阅读(204)  评论(0编辑  收藏  举报