0

我正在尝试做一个更易于管理的函数,而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))
4

1 回答 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)
于 2020-04-12T05:31:44.433 回答