我试图做一个更易于管理的功能,而不必每次都调用这条长线data_stream = bytes(b ^ flipmask(0.08) for b in bytearray(content))
。我正在python 3下使用位翻转算法来唤醒,以对位进行突变,但是我想对其进行一些改进以使其更多可以像flipmask(data)
那样调用。我试图在functools之后进入该行,但是它根本不起作用
def flipmask(p):
return functools.reduce(lambda a, b: (a << 1) | int(random.random() < p), [0]*8)
data_stream = bytes(b ^ flipmask(0.08) for b in bytearray(content))
您可以这样写:
def flipMask(p):
def apply(b): return b ^ sum( (random.random()<p)<<i for i in range(8) )
return apply
然后可以使用map()屏蔽data_stream:
data_stream = bytes( map(flipMask(0.8),bytearray(content)) )
而且,如果您经常创建字节数组:
def randomMask(p,content):
return bytes( map(flipMask(p),bytearray(content)) )
然后:
data_stream = randomMask(0.8,content)