我想知道如何分析我的代码.
我已经阅读了文档,但由于没有给出任何例子,我无法从中得到任何结果.
我有一个很大的代码,它花了很多时间,因此我想分析并提高其速度.我没有在方法中编写我的代码,其间很少但不完全.我的代码中没有任何主要内容.我想知道如何使用分析.我正在寻找关于如何分析的一些示例或示例代码.
我尝试了psyco,即在我的代码顶部添加两行:
import psyco
psyco.full()
Run Code Online (Sandbox Code Playgroud)
这是正确的吗?它没有表现出任何改善.任何其他加速方式,请建议.
我无法在Python2.7中覆盖一些内置函数,例如'__setitem__' (尽管在我测试的先前版本中也是如此)
虽然我知道通过子类化很容易做到,但这不是我想要的,我需要能够动态覆盖这些方法.
显然,当我的类是' object ' 的子类时,重写的方法总是最终调用原始的方法,但是当我的类不是' 对象 '时,它的工作原理是:
>>> def new_implementation(k, v):
... print 'New implementation'
...
### class that extends object
>>> class ExtendsObject(object):
... def __setitem__(self, k, v):
... print 'ExtendsObject implementation'
...
### Checking implementation
>>> obj = ExtendsObject()
>>> obj[0]=0
ExtendsObject implementation
### trying to override setitem, no success
>>> obj.__setitem__ = new_implementation
>>> obj[0]=0
ExtendsObject implementation
### class that does NOT extends object
>>> class DoesNotExtend:
... def __setitem__(self, k, v):
... …
Run Code Online (Sandbox Code Playgroud) 有没有办法在Python中覆盖运行时的@property getter?
我希望我的类有一个"复杂"的getter,它运行一些代码并返回一个可以改变的值.但是,如果由于某种原因我将该变量设置为其他东西,我希望它始终返回该值.
例如:
class Random(object):
@property
def random_number():
return random.randint(0,10)
@random_number.setter
def random_number(value):
# Overlord says that random must always return `value`
(((I don't know that to do here)))
>>>r = Random()
>>>r.random_number
>>>(returns something between 0,10)
>>>r.random_number = 4 # Confirmed by dice roll
>>>r.random_number
>>>4 (always)
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用像'force_value'这样的实例var,我总是检查我的getter,但我想尽可能避免这种情况.
理想情况下,我的setter函数可以做类似的事情
self.random_number.getter = lambda:4
Run Code Online (Sandbox Code Playgroud)
但我不知道如何做到这一点.