pydu/docs/misc.md

126 lines
1.9 KiB
Markdown

# misc
Miscellaneous utils like `timeout`, `trace` and so on.
## misc.timeout
```python
timeout(seconds)
```
This func decorates any func which may be hang for a while. The param `seconds`
can be either integer or float.
In `test.py`, you may write like below:
```python
import time
from pydu.misc import unix_timeout
@timeout(1)
def f():
time.sleep(1.01)
f()
```
And run `test.py`, will see `TimeoutError`.
## misc.trace
```python
trace(obj)
```
Tracing every statement and line number for running program, like `bash -x`.
In `test.py`, you may write like below:
```python
from pydu.misc import trace
@trace
def f():
print(1)
a = 1 + 5
b = [a]
print(2)
f()
```
And run `test.py`, will see below output from console:
```console
test.py(4): print(1)
1
test.py(5): a = 1 + 5
test.py(6): b = [a]
test.py(7): print(2)
2
```
## misc.memoize
```python
memoize(obj)
```
A simple memoize decorator for functions supporting (hashable)
positional arguments.
It also provides a `cache_clear()` function for clearing the cache.
```python
>>> @memoize
... def foo()
... return 1
...
>>> foo()
1
>>> foo.cache_clear()
>>>
```
## misc.memoize_when_activated
```python
memoize_when_activated(obj)
```
A memoize decorator which is disabled by default. It can be
activated and deactivated on request.
For efficiency reasons it can be used only against class methods
accepting no arguments.
```python
>>> class Foo:
... @memoize
... def foo()
... print(1)
...
>>> f = Foo()
>>> # deactivated (default)
>>> foo()
1
>>> foo()
1
>>>
>>> # activated
>>> foo.cache_activate()
>>> foo()
1
>>> foo()
>>> foo()
>>>
```
## misc.super_len
```python
super_len(obj)
```
Get length of object which has attribute named `__len__`, `len`, `fileno`, `tell`,
such as `list`, `tuple`, `dict`, `file` and so on.
```python
>>> from pydu.misc import super_len
>>> super_len([1, 2])
2
>>> super_len(open('test', 'w'))
0
```