Хочу ещё раз на примере декоратора trace
пояснить, какие типы декораторов
используются на практике и как они работают.
Общая структура декоратора и пример использования:
def trace(func):
def inner(*args, **kwargs):
(* Chapter 2: BST *) | |
type 'a tree = Empty | Node of 'a tree * 'a * 'a tree | |
module Set : sig | |
val empty : 'a tree | |
val member : 'a tree -> 'a -> bool | |
val insert : 'a tree -> 'a -> 'a tree | |
end = struct |
# Python 2 | |
>>> b = bytearray(8) | |
>>> v = memoryview(b) | |
>>> v[0] = 42 | |
Traceback (most recent call last): | |
File "<stdin>", line 1, in <module> | |
TypeError: 'int' does not have the buffer interface | |
>>> b | |
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00') |
import time | |
from matplotlib import pyplot as plt | |
def timed(f, args, *, n_iter=100): | |
acc = float("inf") | |
for i in range(n_iter): | |
t0 = time.perf_counter() | |
f(*args) |
open StdLabels | |
type 'a tree = Node of ('a * 'a tree list) | |
let rec make ~f init = | |
let (label, forest) = f init in | |
Node (label, (List.map ~f:(make ~f) forest)) | |
and draw ~f (Node (label, forest)) = | |
let rec inner = function |