python_note

细节
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语句,自定义类实现enterexit,创建上下文管理器
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'")

你可能感兴趣的:(python_note)