Files
python3-cookbook/cookbook/c07/p08_partial.py

61 lines
1.4 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
Topic: 使用partial函数来减少参数个数
Desc :
"""
import logging
from multiprocessing import Pool
from functools import partial
from socketserver import StreamRequestHandler, TCPServer
def spam(a, b, c, d):
print(a, b, c, d)
def output_result(result, log=None):
if log is not None:
log.debug('Got: %r', result)
# A sample function
def add(x, y):
return x + y
class EchoHandler(StreamRequestHandler):
# ack is added keyword-only argument. *args, **kwargs are
# any normal parameters supplied (which are passed on)
def __init__(self, *args, ack, **kwargs):
self.ack = ack
super().__init__(*args, **kwargs)
def handle(self):
for line in self.rfile:
self.wfile.write(self.ack + line)
if __name__ == '__main__':
s1 = partial(spam, 1) # a = 1
s1(2, 3, 4)
s1(4, 5, 6)
s2 = partial(spam, d=42) # d = 42
s2(1, 2, 3)
s2(4, 5, 5)
s3 = partial(spam, 1, 2, d=42) # a = 1, b = 2, d = 42
s3(3)
s3(4)
logging.basicConfig(level=logging.DEBUG)
log = logging.getLogger('test')
p = Pool()
p.apply_async(add, (3, 4), callback=partial(output_result, log=log))
p.close()
p.join()
# socket服务器
serv = TCPServer(('', 15000), partial(EchoHandler, ack=b'RECEIVED:'))
serv.serve_forever()