from collections import defaultdict mailing_list = defaultdict(list) def subscribe(mailbox, subscriber): # subscriber mailbox mailing_list[mailbox].append(subscriber) def notify(mailbox, *args, **kwargs): # mailbox, for sub in mailing_list[mailbox]: sub(*args, **kwargs)
def fun(insert): print 'FUN %s' % insert def bar(insert): print 'BAR %s' % insert
>>> subscribe('insertors', fun) >>> subscribe('insertors', bar) >>> subscribe('bars', bar)
>>> notify('insertors', insert=123) FUN 123 BAR 123 >>> notify('bars', 456) BAR 456
def approved_action(checker, action, obj): # , obj action, # checker if checker(obj): action(obj) import os def remove_file(filename): approved_action(os.path.exists, os.remove, filename) import shutil def remove_dir(dirname): approved_action(os.path.exists, shutil.rmtree, dirname)
def approved_action(obj, checker=lambda x: True, action=lambda x: None): if checker(obj): action(obj) from functools import partial remove_file = partial(approved_action, checker=os.path.exists, action=os.remove) remove_dir = partial(approved_action, checker=os.path.exists, action=shutil.rmtree) import sys printer = partial(approved_action, action=sys.stdout.write)
from random import randint # , . # # randint , - def start(claim): print u' ' claim['state'] = 'analyze' def analyze(claim): print u' ' if randint(0, 2) == 2: print u' ' claim['state'] = 'processing' else: print u' ' claim['state'] = 'clarify' def processing(claim): print u' ' claim['state'] = 'close' def clarify(claim): if randint(0, 4) == 4: print u' ' claim['state'] = 'close' else: print u' ' claim['state'] = 'analyze' def close(claim): print u' ' claim['state'] = None # . state = {'start': start, 'analyze': analyze, 'processing': processing, 'clarify': clarify, 'close': close} # def run_claim(): claim = {'state': 'start'} # while claim['state'] is not None: # , fun = state[claim['state']] # fun(claim)
>>> run_claim() >>> run_claim()
def foo(arg1, arg2): # print 'FOO %s, %s' (arg1, arg2) def bar(cmd, arg2): # . foo... print 'BAR %s' % arg2 cmd(arg2 * 2) # ...
>>> from functools import partial >>> bar(partial(foo, 1), 2) BAR 2 FOO 1, 4
>>> bar(lambda x: foo(x, 5), 100) BAR 100 FOO 200, 5
Source: https://habr.com/ru/post/184156/
All Articles