|
发表于 2018-5-16 22:20:54
|
显示全部楼层
- '''
- 二楼基本上给出了参考答案
- 部分问题上,我和二楼的观点一致。
- 一时兴起,写了下面的代码。
- FunList可以按顺序添加多个返回值为字符串或者None的无参函数
- 其每次执行do方法,都可以得到一个字符串,其拼接规则为:
- 将之前添加的函数依次执行
- 如果结果中存在None,则返回None
- 如果结果中全为字符串,则拼接返回
- 其每次执行doAll方法,都可以得到一系列do方法返回的拼接字符串,默认最多1000条
- 规则是, 依次执行do方法
- 如果结果不是None, 将结果存入集合
- 如果结果是None, 则到此为止, 将集合返回
- 其中的dateRange与你的dataList应该大同小异, 在网上扒的
- '''
- import datetime
- '''
- 作者:知乎用户
- 链接:https://www.zhihu.com/question/35455996/answer/113490733
- 来源:知乎
- 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- '''
- def dateRange(start, end, step=1, format="%Y-%m-%d"):
- strptime, strftime = datetime.datetime.strptime, datetime.datetime.strftime
- days = (strptime(end, format) - strptime(start, format)).days
- return [strftime(strptime(start, format) + datetime.timedelta(i), format) for i in range(0, days, step)]
- def shiftOnece( data ):
- i = 0
- def _f():
- nonlocal i
- if i >= len(data):
- return None
- t = data[i]
- i+=1
- return t
- return _f
- class FunList:
- def __init__(self):
- self.nodes = []
-
- def add(self, * funs):
- if funs == None:
- return 0
- for fun in funs:
- self.nodes.append( fun )
-
- def do(self):
- res = ''
- for f in self.nodes:
- t = f()
- if t == None:
- res = None
- break
- res += t
- return res
- def doAll(self, limit=1000):
- res = []
- while limit==None or limit>0:
- t = self.do()
- if t == None:
- break
- res.append( t )
- if limit!=None:
- limit -= 1
- return res
- if __name__ == '__main__':
- fs = FunList()
- fs.add(lambda:'http://www.baidu.com/')
- fs.add(shiftOnece(dateRange('20161021','20161023',format='%Y%m%d')))
- fs.add(lambda:'.html')
-
- res = fs.doAll()
- print(res)
- # ['http://www.baidu.com/20161021.html', 'http://www.baidu.com/20161022.html']
复制代码 |
|