细节
1)命名:除了ClassName、ExceptionName、GLOBAL_VAR_NAME,其他都是local_var_name形式
2)时间戳:datetime.strftime('%Y-%m-%d %H:%M:%S')
3)判断中文字符:
def isChinese(char):
if u'\u4e00' <= char <= u'\u9fff':
return True
else:
return False
4)with语句,自定义类实现enter、exit,创建上下文管理器
5)刷oj题:《剑指offer》《leetcode》
map(lambda x: int(x), raw_input().split())
print str(a[i]).replace(', ',' ').replace('\'','')[1:-1]+' '
6)在模块里使用相对路径
module_dir = os.path.dirname(os.path.abspath(__file__))
7)在同一个文件中,修改内容
with open('test.txt', 'r+') as f:
content = f.read()
content_new = content.replace('hello', 'HELLO')
f.seek(0, 0)
f.write(content_new)
8)变量作用域的查找优先级为:局部、外部、全局、内建。
9)format函数从Python2.6开始,通过{}和:替代以前的%,相当强大!
用{}来转义大括号:'{} 对应的位置是 {{0}}'.format('runoob')
10)简易http服务器:传输文件、解析index.html;不支持并发请求
python -m SimpleHTTPServer 8990
(python3 -m http.server 8990)
11)查看xml.etree.ElementTree的官方文档,理解更直观、深刻!
编码:It only supports UTF-8, UTF-16, ISO-8859-1, and US-ASCII. The XML specification does not require an XML parser to support anything else.
遍历:iter 对所有子结点进行深度优先遍历;iterfind/findall 在结点的直接子结点中查找
12)pip设置trusted-host,在%APPDATA%目录下,存放pip\pip.ini文件;更新pip到最新版本
python -m pip install --upgrade --force pip
多进程
多进程包multiprocessing,可以充分利用多核的CPU资源;windows没有fork机制,使用全局变量的方法:用functools.partial传递入参(一些东西如果是一样的,往往意味着可以简化);map函数只支持一个参数的函数,需要改造;用进程池来减少进程的创建和开销,提高进程对象的复用;进程池工作时,任务的接收、分配,结果的返回,均由进程池内部的各线程合作完成;打印日志到同一个文件,可通过将返回值传给回调函数来实现。
apply/apply_async和map/map_async
apply方法每次处理一个任务,不同任务的执行方法(回调函数)、参数可以不同;
map方法每次可以处理一个任务序列,每个任务的执行方法相同。
嵌套函数
封装、DRY原则:利用外部函数执行参数检查,便可以在内部跳过错误检查。
def factorial(n):
if not isinstance(n, int):
raise TypeError('Sorry. "n" must be an integer.')
if n < 0:
raise ValueError('Sorry. "n" must be zero or positive.')
def inner_factorial(n):
if n <= 1:
return 1
return n * inner_factorial(n-1)
return inner_factorial(n)
装饰器
接收一个函数,并返回一个“增强版本”的函数。借助它可以抽离出大量与函数本身无关的雷同代码,并继续重用;为已经存在的函数对象添加额外的功能。常见模式:参数检查、缓存、代理、上下文提供者。得益于“python的函数是一级对象”。
@property 可以将方法的返回值作为类的属性来访问
@staticmethod 不用实例化,就可以作为类的方法来调用,类似于普通函数
@classmethod 不用实例化,就可以作为类的方法来调用;并且在该方法内,能通过cls调用类的其他方法,甚至创建实例
数据分析库
1)NumPy:提供了许多数学计算的数据结构和方法,较list效率高很多,ndarray简化了矩阵运算;
2)Pandas:基于NumPy实现,提供了大量数据统计、分析的模型和方法,主要的数据结构:一维Series/二维DataFrame/三维Panel;
3)SciPy:科学计算包,提供了诸如微积分、线代、信号处理、傅里叶变换、曲线拟合等方法;
4)Matplotlib:最基础的绘图工具,功能丰富、定制性强,但配置较复杂。
itertools模块
1)无限迭代器(慎用):count; cycle; repeat(, times)
2)超实用迭代器:chain; groupby; islice; tee(, number); izip(*iterables); imap(func, *iterables); ifilter
3)高级迭代器:product笛卡尔积; combinations(, r)子组合序列; permutations(, r)子排列序列
timeit模块
from timeit import timeit
def re_find(string, text):
if re.match(text, string):
pass
def find(string, text):
if string.find(text) != -1:
pass
def best_find(string, text):
if text in string:
pass
print timeit("re_find(string, text)", "from __main__ import re_find; string='lookforme'; text='look'")
print timeit("find(string, text)", "from __main__ import find; string='lookforme'; text='look'")
print timeit("best_find(string, text)", "from __main__ import best_find; string='lookforme'; text='look'")