我如何使翻转功能更易于操作以返回全部内容?

问题描述 投票:0回答:1

我试图做一个更易于管理的功能,而不必每次都调用这条长线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))
python bit-manipulation
1个回答
0
投票

您可以这样写:

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)
© www.soinside.com 2019 - 2024. All rights reserved.