如何使一个小翻转函数更易于管理以返回完整内容?

2024-04-25 23:15:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个更易于管理的函数,而不必每次调用这一长行data_stream = bytes(b ^ flipmask(0.08) for b in bytearray(content))。我在Python3下使用位翻转算法来改变位,但我想对其进行一点改进,以使调用像flipmask(data)一样更易于管理。我试着进入那条线,但根本不起作用

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))

1条回答
网友
1楼 · 发布于 2024-04-25 23:15:51

你可以这样写:

def flipMask(p): 
    def apply(b): return b ^ sum( (random.random()<p)<<i for i in range(8) ) 
    return apply

然后可以使用map()屏蔽数据流:

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)

相关问题 更多 >