1.yield函数
https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/
#coding=UTF-8
from collections import OrderedDict
from collections import namedtuple,Iterable
from functools import partial
data_base = 20170118
price_str = '30.14, 29.58, 26.36, 32.56, 32.82'
price_array = price_str.split(',')
for i in range(len(price_array)):
price_array[i] = float(price_array[i])
date_array = [str(data_base + ind) for ind, _ in enumerate(price_array)]
pp_array = [(price1, price2) for price1, price2 in zip(price_array[:-1],price_array[1:])]
change_array = map(lambda pp: reduce(lambda a,b: round((b - a)/a, 3), pp), pp_array)
change_array.insert(0,0)
stock_namedtuple = namedtuple('stock', ('date', 'price', 'change'))
stock_dict = OrderedDict((date,stock_namedtuple(date, price, change))
for date, price, change in zip(date_array,price_array,change_array))
class StockTradeDays(object):
def __init__(self, price_array, start_date, date_array=None):
self.__price_array = price_array
self.__date_array = self._init_days(start_date, date_array)
self.__change_array = self.__init_change()
self.stock_dict = self._init_stock_dict()
def __init_change(self):
price_float_array = [float(price_str) for price_str in self.__price_array]
pp_array = [(price1, price2) for price1, price2 in zip(price_float_array[:-1], price_float_array[1:])]
change_array = map(lambda pp: reduce(lambda a, b: round((b - a) / a, 3), pp), pp_array)
change_array.insert(0, 0)
return change_array
def _init_days(self, start_date, date_array):
if date_array is None:
date_array = [str(start_date+ind) for ind, _ in enumerate(self.__price_array)]
return date_array
def _init_stock_dict(self):
stock_namedtuple = namedtuple('stock', ('date', 'price', 'change'))
stock_dict = OrderedDict(
(date, stock_namedtuple(date, price, change))
for date, price , change in zip(
self.__date_array, self.__price_array, self.__change_array
))
return stock_dict
def filter_stock(self, want_up=True, want_calc_sum=False):
filter_func = (lambda day: day.change>0) if want_up else(lambda day: day.change<0)
want_days = filter(filter_func, self.stock_dict.values())
if not want_calc_sum:
return want_days
change_sum = 0.0
for day in want_days:
change_sum = change_sum + day.change
return change_sum
def __str__(self):
return str(self.stock_dict)
__repr__ = __str__
def __iter__(self):
for key in self.stock_dict:
yield self.stock_dict[key]
def __getitem__(self, ind):
date_key = self.__date_array[ind]
return self.stock_dict[date_key]
def __len__(self):
return len(self.stock_dict)
date_base = 20170118
trade_days = StockTradeDays(price_array, date_base)
print(trade_days)
print trade_days.filter_stock()
2.@property
https://www.cnblogs.com/miqi1992/p/8343234.html
3.hasattr()
https://www.cnblogs.com/zanjiahaoge666/p/7475225.html
4.类方法和静态方法
https://www.cnblogs.com/ScvQ/p/7054513.html
5.itertools
https://github.com/bbfamily/abu/blob/master/ipython/第二章-量化语言——Python.ipynb
6.进程和线程
http://yangcongchufang.com/高级python编程基础/python-process-thread.html
https://www.jianshu.com/p/7ac73e9c7150
7.上下文管理器
https://www.jianshu.com/p/d53449f9e7e0