知识总结
变量与变量名 如
a = 123
,此时,python解释器在做了两件事,在内存中创建了一个整数123对象,在内存中创建了一个名为a的变量。并把它指向123,一个赋值语句被执行后,内存中一个变量名与它所指向的对象就是一对一的映射关系把函数作为参数传入称为高阶函数,map()函数接受两个参数:函数和iterable,如map将传入的函数依次作用到序列的每个元素,并把结果作为新的iterator返回,又如sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序,要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True
字符编码 8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,但是随着计算机的不断发展和普及,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符。ASCII编码是1个字节,而Unicode编码通常是2个字节。如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。
所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。tuple和list tuple和list都是有序列表,区别在于tuple不可变而list可变。注意定义只有一个元素的tuple时应用这种形式
a=(1,)
。条件判断 特殊形式为
if x:print('True')
只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False。dict 使用键-值(key-value)存储,dict根据key来计算value的存储位置。通过key计算位置的算法称为哈希算法(Hash)。要保证hash的正确性,作为key的对象就不能变,并且key不能重复。
set 和dict类似,是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。要创建一个set,需要提供一个list作为输入集合。set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作。
借助抽象,我们才能不关心底层的具体计算过程,而直接在更高的层次上思考问题
函数 Python的函数返回多值其实就是返回一个tuple,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值
函数的默认参数必须是不可变对象,
*args
是可变参数,args接收的是一个tuple。**kw
是关键字参数,kw接收的是一个dict生成器(generater)是为了节省空间,一边循环一边计算后续的元素,这样就不用创建完整的list。生成器保存的是算法,并且生成器是一个可迭代对象,一般用for来调用,当推算的规则太复杂,我们可以用函数,当一个函数中出现了yield语句,它就变成了一个生成器
迭代器(iterator):可以直接作用于for循环的对象统称为可迭代对象,可以被next()函数调用并不断返回下一个值的对象称为迭代器,它表示的是一个数据流,一个惰性计算的序列,我们可以把它看作一个有序序列,但是我们事先不能知道他的长度,因此list,str不是迭代器##
小技巧
str[::-1], 字符串反转