Repository navigation
Python
AnneBlog edited this page Feb 28, 2017
·
5 revisions
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
-
类型:
数值(number:int, float, double, complex),字符串(string),列表(list),元祖(tuple),字典(dict) -
分类:
存储类型:原子类型(数值,字符串),容器类型(列表,元组,字典)
更新类型:可变类型(列表,字典),不可变类型(元组,字符串,数值)
访问类型:直接访问(数值),序列类型(字符串,列表,元组),映射类型(字典,哈希键值)
-
算术运算
+(加), -(减), **(乘), /(除), ***(幂运算), %(求余或取模)a op= b 等价于 a = a op b, 其中op可以是+, -, **, /, ***, %
-
关系运算
>(大于), >=(大于或等于), <(小于), <=(小于或等于), ==(等于),!=(不等于) -
逻辑运算
and(与), or(或), not(非) -
位运算
&(与), |(或), ~(非), ^(异或),<<(左移), >>(右移) -
in运算
in,not in -
is运算
is, not is
if condition:
commands
if condition:
commands1
else:
commands2
if condition1:
commands1
elif condition2:
commands2
[else:
commands3]
result = true_result if condition else false_result
for item in sequence:
commands
[else:
else_commands]
while condition:
commands
[else:
else_commands]
def func_name([arg_name1[, arg_default=default_value[, *args[, **kwargs]]]]):
commands
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
raise Error_name(args)
try:
command_try
except Error_name as err:
command_err
else:
command_else
finally:
command_finally
# condition为True,继续执行下一条语句;否则,抛出异常程序退出
assert condition
import module_name [as alias]
or
from package import module_name [as alias]
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
func = lambda [arg1 [,arg2,.....argn]]:expression # lambda
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
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
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)
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)
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()
python -m pdb py_script.py
import pdb
pdb.set_trace() # 设置断点
浅/深拷贝,只发生在容器对象(tuple,list,dict)。
浅拷贝,是容器对象默认方式,有三种实现方式(切片操作、工厂函数、copy.copy())。
深拷贝,只有copy.deepcopy().
import gc
gc.collect()
del var_name
del seq_name[:]
del seq[slice]
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()
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)
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
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))
读文件
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)