Skip to content
AnneBlog edited this page Feb 28, 2017 · 5 revisions

1. Python环境

Python官网: https://www.python.org/

  • windows
    下载Windows x86-64 MSI installer(for python2.x)或Windows x86-64 executable installer(for python3.x)
    双击安装
    将python安装路径添加到path(通过环境变量设置)
  • centos
    tar -xzvf Python2.7.13.tgz
    cd Python2.7.13
    ./configure --prefix=/your_python_path/
    make && make install
  • 更改pip源
    mkdir ~/.pip
    vim ~/.pip/pip.conf
    [global]
    index-url = http://pypi.douban.com/simple
    trusted-host = pypi.douban.com
    disable-pip-version-check = true
    timeout = 120

2. Python基本类型&运算符

2.1 Python基本类型:

  • 类型:
    数值(number:int, float, double, complex),字符串(string),列表(list),元祖(tuple),字典(dict)

  • 分类:
    存储类型:原子类型(数值,字符串),容器类型(列表,元组,字典)
    更新类型:可变类型(列表,字典),不可变类型(元组,字符串,数值)
    访问类型:直接访问(数值),序列类型(字符串,列表,元组),映射类型(字典,哈希键值)

2.2 Python运算符

  • 算术运算
    +(加), -(减), **(乘), /(除), ***(幂运算), %(求余或取模)

    a op= b 等价于 a = a op b, 其中op可以是+, -, **, /, ***, %

  • 关系运算
    >(大于), >=(大于或等于), <(小于), <=(小于或等于), ==(等于),!=(不等于)

  • 逻辑运算
    and(与), or(或), not(非)

  • 位运算
    &(与), |(或), ~(非), ^(异或),<<(左移), >>(右移)

  • in运算
    in,not in

  • is运算
    is, not is

3. Python基本语法

3.1条件语句

if condition:    
    commands    

if condition:
   commands1    
else:   
    commands2

if condition1:    
    commands1    
elif condition2:    
    commands2    
[else:    
    commands3]   

result = true_result if condition else false_result     

3.2 循环语句

for item in sequence:    
    commands    
[else:    
    else_commands]

while condition:    
    commands    
[else:    
    else_commands]    

3.3 函数

def func_name([arg_name1[, arg_default=default_value[, *args[, **kwargs]]]]):    
    commands    

3.4 类

class super_name(object):    
    def __init__(self, arg_name1, arg_default1=default_value1):    
        self.arg_name1 = arg_name1    
        self.arg_default1 = arg_default1    

    def set(self, x, y):    
        self.arg_name1 = x    
        self.arg_default1 = y    

    def get(self):    
        print(self.arg_name1, self.arg_default1)      

    def __del__(self):    
        pass 

class sub_name(super_name):
    def __init__(self, arg_name1, arg_name2, arg_default1=default_value1, arg_default2=default_value):    
        super(sub_name, self).__init__(arg_name1, arg_default1)    
        self.arg_name2 = arg_name2    
        self.arg_default2 = arg_default2    

    def sub_set(self, x, y):    
        self.arg_name2 = x    
        self.arg_default2 = y        

    def sub_get(self, xy):    
        print(self.arg_name2, self.arg_default2, xy)          

    def __del__(self):    
        pass

class sub_sub_name(super_name, sub_name):
    def __init__(self, arg_name1, arg_name2, arg_name3, arg_default1=default_value1, arg_default2=default_value):    
        super_name.__init__(self, arg_name1, arg_default1)    
        sub_name.__init__(self, arg_name2, arg_default2)    
        self.arg_name3 = arg_name3    

    def sub_sub_set(self):    
        pass    
    
    def sub_sub_get(self):
        super_name.get(self)    
        sub_name.sub_get(self, 100)   
    
    def __del__(self):    
        pass    

3.5 异常抛出

raise Error_name(args)

3.6 异常捕获

try:    
    command_try    
except Error_name as err:    
    command_err    
else:
    command_else
finally:
    command_finally

3.7 断言

# condition为True,继续执行下一条语句;否则,抛出异常程序退出    
assert condition    

3.8 模块导入

import module_name [as alias]    
or   
from package import module_name [as alias]    

4. Python高级语法

4.1 列表解析

iter_type = [1, 2, 3, 4, 5]  # iter_type: tuple, list, dict, iter    
[item for item in iter_type]  # list    
{item for item in iter_type}  # set    
{key:value for key,value in adict.iteritems()}  # dict    

4.2 lambda表达式

func = lambda [arg1 [,arg2,.....argn]]:expression  # lambda    

4.3 yield语句

def read_file(file_name):    
    with open(file_name, "rb") as fid:    
        for line in fid:    
            yield line    

def counter(start_at):    
    count = start_at    
    while True:    
        val = (yield count)    
        if val is not None:    
            count = val    
        else:    
            count += 1    

4.4 装饰器

import time    
import traceback    

from functools import wraps    

class RetryError(Exception):    
    def __init__(self, *args, **kwargs):    
        Exception.__init__(self, *args, **kwargs)    

def no_args_decorate(func):    
    @wraps(func)    
    def wrapper(*args, **kwargs):    
        return func(*args, **kwargs)    
    return wrapper    

def has_args_decorate(times=3, interval=0):    
     def decorate(func):    
        @wraps(func)    
        def wrapper(*args, **kwargs):    
            for tm in xrange(times):    
                try:    
                    return func(*args, **kwargs)    
                except:    
                    traceback.print_exc()    
                    time.sleep(interval)    
                else:    
                    raise RetryError("[重试机制]: 共%s次,已用尽!" % times)    
        return wrapper    
    return decorate    

4.5 with上下文管理

import sys    
import signal    
import traceback    

class TimeLimitError(Exception):    
    def __init__(self, *args, **kwargs):    
        Exception.__init__(self, *args, **kwargs)    

class TimeLimit(object):    
    def __init__(self, seconds=5, is_kill=False):    
        self.seconds = seconds    
        self.is_kill = is_kill    

    def time_out(self, signum, frame):    
        if self.is_kill:    
            raise(TimeLimitError("[超时机制]函数已经运行{0}seconds,超出预计时间!函数已被杀死".format(self.seconds)))    
        else:    
            sys.stdout.write("[超时机制]函数已经运行{0}seconds,超出预计时间!函数仍在运行".format(self.seconds))    

    def __enter__(self):    
        signal.signal(signal.SIGALRM, self.time_out)    
        signal.alarm(self.seconds)    

    def __exit__(self, key, value, trackback):    
        signal.alarm(0)    

4.6 静态方法vs类方法

class MyClass(object):    
    def __init__(self):        
        self.x = 10    
    
    def get(self):    
        print(self.x)    

    @staticmethod    
    def static_method(a, b):    
        print(a,b)    
    
    @classmethod    
    def cls_method(cls, a, b):    
        print (a,b)

4.7 迭代器

class MyClass(object):  
    def __init__(self):  
        self.x = 1   
    
    def __iter__(self):  
        return self
    
    def next(self): 
        if self.x<10:   
            self.x += 1  
            return self.x  
        else:  
            raise StopIteration()    

4.8 pdb调试

python -m pdb py_script.py  

import pdb  
pdb.set_trace()  # 设置断点  

4.9 深拷贝vs浅拷贝

浅/深拷贝,只发生在容器对象(tuple,list,dict)。  
浅拷贝,是容器对象默认方式,有三种实现方式(切片操作、工厂函数、copy.copy())。  
深拷贝,只有copy.deepcopy().  

4.10 内存管理

import gc  
gc.collect()  

del var_name  
del seq_name[:]  
del seq[slice] 

4.11 协程

import time  

def consumer():  
    ret = ''  
    while True:  
        number = (yield ret)  
        if not number:  
            return  
        print('Consuming {num}...'.format(num=number))    

def produce(c):  
    c.next()  
    num = 0  
    while num < 5:  
        num += 1  
        print('Producing {num}...'.format(num=num))  
        r = c.send(n)  
        print('[PRODUCER] Consumer return: %s' % r)  
    c.close()  

4.12 偏函数

from functools import partial  

def fun(x, y, z):    
    print(x)  
    print(y)  
    print(z)  

fz = partial(fun, z='this is a test')  
fz(10, 20)  

4.13 元类

class MyMetaclass(type):  
    def __new__(cls, name, bases, attrs):  
        attrs['test'] = lambda self, value: self.append(value)  
        return type.__new__(cls, name, bases, attrsr)  

class MyTest(list, metaclass=MyMetaclass):  
    pass     

4.14 闭包

import numpy as np  
def array_fun():  
    def triangle_wave(x,c, c0, hc):  
        x = x -int(x)  
        if x>c :   
            r  = 0.0   
        elif x<c0:  
            r = x/c0*hc  
        else:  
            r = (c-x)/(c-c0)*hc  
    return r  
    x = np.linspace(0, 2, 1000)  
    trianle_unfunc1 = np.frompyfunc(triangle_wave, 4, 1)  
    print(trianle_unfunc1(x, 0.6, 0.4, 1.0))  

5. Python编程实例

5.1 文件IO

读文件        
with open(file_name, 'rb') as fid:    
    for line in fid:    
        # string.strip() 去掉字符串前后两端的空白;string.split('\t') 用'\t'切割字符串
        items = line.strip().split("\t")        

写文件    
# 如果文件不存在,则创建;如果文件存在,先清空再写    
with open(file_name, 'wb') as fid:    
    fid.write("This is a test \n")    

# 如果文件不存在,则创建;如果文件存在,内容追加在文件末尾    
with open(file_name, 'ab') as fid:    
    fid.write("This is a test \n")    

读取xlsx文件  
from openpyxl import load_workbook  
wb = load_workbook(filename = 'empty_book.xlsx')  
sheet_ranges = wb['range names']  
print(sheet_ranges['D18'].value)  
print(sheet_ranges.min_row) # 开始的行号  
print(sheet_ranges.max_row) #  结束的行号  
print(sheet_ranges.min_column) # 开始的列号  
print(sheet_ranges.max_column) # 结束的列号  
for row in range(sheet_ranges.min_row, sheet_ranges.max_row+1):  
    for col in range(sheet_ranges.min_column, sheet_ranges.max_column+1):  
        print(sheet_range.cell(row=row, column=col).value)  

写入xlsx文件  
from openpyxl import Workbook  
from openpyxl.compat import range  
from openpyxl.utils import get_column_letter  
wb = Workbook()  
dest_filename = 'empty_book.xlsx'  
ws1 = wb.active  
ws1.title = "range names"    
for row in range(1, 40):    
    ws1.append(range(600))  
ws2 = wb.create_sheet(title="Pi")  
ws2['F5'] = 3.14    
ws3 = wb.create_sheet(title="Data")    
for row in range(10, 20):    
    for col in range(27, 54):        
        ws3.cell(column=col, row=row, value="{0}".format(get_column_letter(col)))    
wb.save(filename = dest_filename)    

5.2 网络IO

5.3 多线程

5.4 多进程

5.5 进程池

5.6 消息队列

5.7 json操作

5.8 re正则

5.9 argparse命令行解析

5.10 traceback异常追踪

5.11 日期模块

5.12 logger日志

5.13 mysql操作

5.14 redis操作

5.15 mongo操作

5.16 selenium自动化测试

Clone this wiki locally