起因

最近一直在写数据构造器,所有的虚假数据均调用的是一个Methor类,需要用到类反射。

采取的做法

方法一

为了方便,采取了eval()将组合成的方法名字符串运行成函数,刚开始很正常,但是一看速度,心态炸了啊!!!!!平均需要0.03s一次…

1
2
3
4
class Methors(object):
def test(self):
print("test")
eval(f"Methors().test()")

方法二

采用正常的类反射来做,速度翻了几百倍,终于舒服了,现在数据能够每秒几万条了…

1
2
3
4
class Merhors(object):
def test(self):
print("test")
getattr(Methor(), 'test')()

结论

虽然两种方法都可以实现,但是效果差别很多,类似的还有local()用法。

具体原理目前不明,这几天没时间探究,改天再来。个人猜测是前者涉及到转换数据类型,后者估计是直接尝试调用,然后返回调用地址(瞎猜…)

相关文章
评论
分享
  • Python小技巧

    列表推导123456# 列表推导l = [x for x in range(10)]# 集合推导s = {x for x in range(10)}# 字典推导d = {x:x/2 for x in r...

    Python小技巧
  • 代理IP池的构建

    最近开始学scrapy的使用,总的来说框架使用起来还不错,毕竟使用了异步架构,效率挺高的。底层还没看,再学点去读源码。 成果: 本来计划爬西刺代理构建好代理IP池然后再去爬其他网站数据,结果我是想多了,免费的不靠谱啊,没有合适的IP...

    代理IP池的构建