我可以在python中从ready模块中删除方法吗?最近我试图在基于浏览器的交易平台上编写一个python代码,在这里他们允许你导入python' time'包但时间包没有sleep()方法。虽然我试图导入睡眠方法,但它给了我属性错误。在询问该平台的技术支持人员时,我知道他们不支持sleep()方法。我只是想知道我们怎么能这样做?它只是从包中删除方法?还是有更好的方法吗?
答案 0 :(得分:6)
可以在运行时从名称空间中删除方法(函数)。 这称为猴子修补。交互式会话中的示例:
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> time.sleep(2)
>>> del time.sleep
>>> time.sleep(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'sleep'
但回到原来的问题:我相信在您使用的平台上,他们可能已经用自定义版本替换了几个标准库模块(包括时间模块)。所以你应该问他们如何实现你想要的延迟,而不必忙于等待。
答案 1 :(得分:1)
import time
time.sleep(1)
del time.sleep
time.sleep(1)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-6-07a34f5b1e42> in <module>()
----> 1 time.sleep(1)
AttributeError: 'module' object has no attribute 'sleep'
答案 2 :(得分:1)
如果您没有time.sleep
方法,您可以轻松编写自己的方法(虽然不太可能精确或有效):
def sleep(seconds):
a = time.time()
b = time.time()
while b - a < seconds:
b = time.time()
以下是我运行的一些精度测试(只有一个print语句来查看它进入循环的频率):
>>> sleep(1) 2.86102294922e-06 0.0944359302521 0.14835691452 0.198939800262 0.249089956284 0.299441814423 0.349442958832 0.398970842361 0.449244022369 0.498914003372 0.549893856049 0.600338935852 0.648976802826 0.700131893158 0.750012874603 0.800500869751 0.850263834 0.900727987289 0.950336933136 1.00087189674
精度保持在100英里秒精度。 :)
您可能没有这个方法,因为他们修改了源代码,或者在代码开始执行之前在解释器上运行了一些东西(使用del
关键字,就像在其他答案中一样)。