闲言碎语
二进制0b, 八进制0o, 十六进制0x(进制转换二进制bin, 八进制oct,十六进制hex)
id(var_name)查看内存地址(十六进制地址hex(id(var_name)))
ord(‘a’)查看ascii编码对应的数字,如a是97
isinstance(a, str)或isinstance(a, (str, int))判断变量a是否为某一类型或某几种类型中的一种
sys.setrecursionlimit(100000) 设置递归次数上限(实际根据环境上限略有不同)
@classmethod 类方法
@staticmethod 静态方法
数据筛选
以筛选出>=0的数字为例
列表
#造数据 from random import randint #Python 3使用range, 2使用xrange,-10到10之间的10个整数 data = [randint(-10, 10) for _ in xrange(10)] #常规方法 res = [] for x in data: if x >= 0: res.append(x) print res #lambda的方法 filter(lambda x: x>=0, data) #列表解析方法,首选,效率较上面两种方法更高 [x for x in data if x >= 0]
字典
#造数据, 20个分数在60到100之前的随机数,取分数大于90的数据 from random import randint d = {x: randint(60,100) for x in xrange(1, 20)} #字典解析的方法 {k:v for k,v in d.iteritems() if v > 90 } # sorted默认是对键进行排序,如何按值进行排序呢?有以下两种方法 from random import randint d = {x: randint(60, 100) for x in 'xyzabc'} # sorted(zip(d.values(), d.keys())) # Python 2下使用itervalues和iterkeys效率更高 sorted(d.items(), key=lambda x: x[1])
元组
对于一些固定结构的数据我们一般会使用元组,其占用存储空间小,但语义化较弱,如何解决呢?可通过定义常量、namedtuple的方式来解决
# NAME = 0 # AGE = 1 # SEX = 2 # EMAIL = 3 NAME, AGE, SEX, EMAIL = range(4) # Python 2中使用xrange student = ('Jim', 16, 'male', 'jim@abc.com') print(student[NAME]) # namedtuple from collections import namedtuple Student = namedtuple('Student', ['name','age','sex','email']) s = Student('Jim', 16, 'male', 'jim@abc.com') print(s.name)
统计
from collections import Counter import re txt = open('test.txt').read() c3 = Counter(re.split('\W', txt)) # 统计出现频率在前10的单词 c3.most_common(10)