«Повторить» в Haskell?

Для этого я бы использовал dill , который может сериализовать почти что угодно в python.

>>> import dill
>>> 
>>> def foo(a):
...   def bar(x):
...     return a*x
...   return bar
... 
>>> class baz(object):
...   def __call__(self, a,x):
...     return foo(a)(x)
... 
>>> b = baz()
>>> b(3,2)
6
>>> c = baz.__call__
>>> c(b,3,2)
6
>>> g = dill.loads(dill.dumps(globals()))
>>> g
{'dill': , 'c': , 'b': <__main__.baz object at 0x4d61970>, 'g': {...}, '__builtins__': , 'baz': , '_version': '2', '__package__': None, '__name__': '__main__', 'foo': , '__doc__': None}

Dill регистрирует его типы в реестре pickle, поэтому если у вас есть код черного ящика, который использует pickle, и вы не можете его отредактировать, то просто импортировать укроп может волшебным образом заставить его работать без monkeypatching стороннего кода.

Вы также хотели разжечь

>>> # continuing from above
>>> dill.dump_session('foobar.pkl')
>>>
>>> ^D
dude@sakurai>$ python
Python 2.7.5 (default, Sep 30 2013, 20:15:49) 
[GCC 4.2.1 (Apple Inc. build 5566)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import dill
>>> dill.load_session('foobar.pkl')
>>> c(b,3,2)
6

У Dill также есть некоторые хорошие инструменты , помогающие понять, что приводит к сбою вашего травления, когда ваш код выходит из строя .

13
задан Don Stewart 24 April 2011 в 19:37
поделиться