judge whether a object is a type
type(object) == type(str())
或
from types import StringTypes
type(object) == types.StringType #记得要import types
或if isinstance(obj, StringTypes):
与系统定义的单值比较尽量使用is,虽然使用==能使用同样功能但效率差许多,因为一个是直接比较一个需要调用其比较函数,老外曾经测试过。如if x is None,if x is not None,不要if x == None。is的非形式为is not。
所有的控制语句需要用':'换行,定义函数同样,切记,Python中的一切都是对象,包括函数。
尽量使用xrange代替range,range直接生成指定大小的list,而xrange只是生成一个对象而在需要时才产生下一个值,这可以节省非常多的内存,对于足够大的值使用range可能造成内存不足。
编码规范:类名首字母大写,e.g. ,Dog,变量和函数名__开头为私有,尽量只将函数暴露给外部,变量命名小写加_即可,同Linux。某些时候和系统的命名冲突可以_结尾,如_china_。
http://www.cnblogs.com/kym/archive/2011/03/17/1986640.html
2. itertools模块对迭代和组合非常有效,比如
import itertools
iter = itertools.permutations([1, 2, 3])
lst = list(iter) #此时lst为[1, 2, 3]的全排列
3. 数组即list,下标中的冒号表示到XX为止或以XX开始
string中单个item是不可修改的,故不可使用str_test[5] = 'm'来修改一个字节
正确的方式是str_test = str_test[4:] + 'm' + str_test[:6]
但这种方法会多次拷贝字符串造成效率较低,故较好的方法是先用list存储之后再转
其长度并非list.len而是len(list)
4. sequence类型的slice详解,比如string、list、tuple
1)+不能用来连接一个字符串和数字,因为其也数字加法运算符
2)[1:4:2]除起始两个值代表起始和结束位置外,最后一个代表步进值
5. Python数据类型分类
number
sequence: string(不可变)、list、tuple(不可变)
mapping: dictionary,类似stl中的map
可变和不可变类似于c++中的const,即一旦定义后不许改变其值。
number支持各种算术运算。
string是顺序的,不可变的。
list是顺序的,可变的。
dictrionary是无顺序的,可变的
tuple是顺序的,不可变的。
str() list() dict() tuple()这几内置函数分别用于构造相应的类型。
6. list
特点:有序、可变
可直接使用list将序列构造一个list,如:test_list = list('china')
修改时可直接以slice为单位,且不要求被替换的内容与新内容长度相同,故修改后可能list的长度会改变,如:test_list[4:6] = ['n', 'a', 'm', 'mddd']或test_list[4:] = ['e']
注意list中的count并非其中的元素个数,而是给定的value在list中出现的次数
其他如下:
>>> L.append(4) #只能一次添加一个object,不能用于两个sequence连接,因为新sequence将会被作为一个object添加进去
>>> L
[0, 1, 2, 3, 4]
>>> L.extend([5, 6]) #参数为一个sequence,直接添加到其末尾
>>> L
[0, 1, 2, 3, 4, 5, 6]
>>> L = L + [7] #可为sequence或object,与前面的区别是会新构造一个对象,故需要重新赋值,至于+=是否会被当作append或extend处理目前并未有相关资料,如果作者有注意到的话应该会做此类优化
>>> L
[0, 1, 2, 3, 4, 5, 6, 7]
7. dictionary
初始化方式为test_dic = {1:'one', 2:'two}
可以使用items()导出到list, test_list = test_dic.items(),将会得到一个类似[(1, 'one'), (2, 'two')]的list。
可以使用fromkeys()从list导入key,value将以None填充,如:
test_list = [1, 2, 3, 4]
test_dic.fromkeys(test_list)
for x in test_dic会遍历test_dic,默认遍历key,使用test_dic的iterkeys()、itervalues()、iteritems()可以分别得到遍历key、value和item的iterator。
8. tuple
test_tuple = (1, 3, 4)
可将tuple理解成const的list,但其成员的成员是可变,即其某一位置必须指向某一对象不可再指向另一对象,但该对象本身是可变的。
注意当只有一个初始成员时需要在初始化末尾加',',如:
test_tuple = (1, )
否则将会被初始化为整型。
9. 查找一个值是否在容器中要用in而不是用index然后去检查其返回值是不是>0...
10. print a, b, c, print会自动在每个变量后加一个空格,最后以逗号结尾可以防止调用print结束会自动附加的\n换行符
print >> object, x, y 将x,y出到object的write方法中,该ojbect必须有些方法哦
Python中print为以下语句的简写
import sys
sys.stdout.write(str(x) + '\n')
故可通过将stdout重定向而实现print的输出重定向功能
import sys
fp = file('log.txt', 'a')
sys.stdout = fp
print 'hello world! heihei'
sys.stdout = sys.__stdout__ # reset to default
11. 语句和语法
Python要写超过一行的语句,需要一对符号的语句或者在前一行后加上'