第五章 数字
1.数字类型
a,Python支持的数字类型:整型,长整型,布尔型。双精度浮点型,十进制浮点型,和复数
b,建议用大写字母“L”表示长整数。并且,整型和长整型正在趋向统一。必要时整型会悄悄自动转换为长整型,从而避免数值范围越界为用户带来烦恼。
c,双精度浮点数(类似于c中的double)
d,复数:实数部分和虚数部分都是浮点数。推荐用后缀“j”,和程序输出保持一致;num.real,num.imag,num.conjugate()分别表示复数的实部,虚部,共轭复数。
2.运算符
a,Python支持的运算符几乎全都会进行自动数据类型转换。
b,现阶段Python仍采用整数相除商取整的做法,将来将会支持得到真正的商。可以通过from __future__ import division来调用该除法。地板除将会由新运算符‘//’支持。
c,非复数取余等价于:x - (math.floor(x/y) * y)。复数取余等价:x - (math.floor((x/y).real) * y)
d,幂运算操作符比其左侧操作数的一元操作符优先级高,比其右侧操作数的一元运算符优先级低。
3.内建函数与工厂函数
a,int(),long(),float(),complex(),bool()(均由内建函数改变为工厂函数)
b,内建函数:abs(),coerce(),divmod(),pow(),round()。
c,只适用于整数:进制转换函数oct(),hex();ASCII转换函数chr(),ord();unichr()
4.相关模块
a,decimal,array,math/cmath,operator,random
b,random包含多个伪随机数发生器。randrange(),uniform(),randint(),random(),choice()
第六章 序列:字符串、列表和表列
1.序列类型操作符(所有序列类型均适用)
a,in,not in: obj [not] in sequence(返回True或False)
b,seq[ind](获得下标为ind的元素);seq[ind1:ind2](获得下标从ind1到ind2间的元素集合);seq *expr(序列重复expr次);seq1 + seq2(连接序列seq1和seq2,用于合并序列效率低);
c,扩展切片操作,第三个索引值被用作步长参数;sequence[:None]分隔出整个序列。
2.内建函数
a,类型转换:list(iter);str(obj);unicode(obj);basestring()(抽象工厂函数,不能被实例化和调用);tuple(iter)
b,操作类型函数:len(),reversed(),sum()(三者只接受序列类型);enumerate(iter),sort(),zip()(接受可迭代对象),max(),min()(除iter外还可接受参数表)
3.字符串
a,出于性能考虑,尽量不要导入和使用string模板。使用%格式化操作符或者把字符串放到一个列表中然后用join()方法。
b,Python 的语法允许你在源码中把几个字符串连在一起写。
c,如果把一个普通字符串和一个Unicode 字符串做连接处理,Python 会在连接操作前先把普通字符串转化为Unicode 字符串。
d,格式化操作符只适用于字符串:非常类似于c语言的printf()格式代码 format_string % (arguments_to_convert)
e,字符串模板:from string import Template;原始字符串操作符(r/R),这个类似于c#里的@""用法。
f,Unicode字符串操作符(u/U):将字符串转换成完全地Unicode字符串对象。(原始Unicode字符串:Unicode操作符必须出现在原始字符串操作符之前)
4.字符串内建函数
a,max()和min()函数返回迭代器或者参数列中最大/最小的元素(字符串是按照ASCII码值排列)
b,enumerate(iter):对象生成由iter 每个元素的index 值和item 值组成的元组;zip()返回一个列表
5,字符串的独特特性:
a,一个反斜杠加一个单一字符表示一个特殊字符。也可直接用\000或者\xXX(八进制或者十六进制)的ASCII码值。NUL在Python中没有结束符的含义
b,三引号允许一个字符串跨多行,字符串中可以包含换行符.制表符等其他特殊字符(多用于嵌入的代码,比如html或者SQL)
c,处理Unicode规则:程序中出现字符串时一定要加个前缀u;不要用str()函数,用unicode()代替;不要用过时的string模块,它基本上只能正常处理ASCII字符;不到必须时不要再程序里面编解码Unicode字符,只在要写入文件或者数据库或者网络时,才调用encode()函数,相应地,只在你需要把数据读回来的时候才调用decode()函数。