如何在听写理解中读取字节

2024-09-29 20:25:38 发布

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

我认为这段代码可能是一个dict理解:

payload = {}
           

for itemID in iter( functools.partial(decodePayload, ID=TAG_BYTE), 0):
    itemName = decodePayload(TAG_STRING)
    itemPayload = decodePayload(itemID)
    payload[itemName] = NBT(
        ID=itemID,
        payload=itemPayload
    )
    return payload

decodePayload基本上是一种幻想。下一个是bytearray迭代器的uuu(),它存在于另一个函数中。它根据一个参数决定读取多少字节以及如何解码。它经常递归地调用自身,因为所述数组包含嵌套数据

此代码位于decodePayload函数内部,递归调用该函数直到返回0(这意味着此序列已结束,但bytearray可能未结束)

itemID、itemName和itemPayload绝对需要按顺序读取

我想做的事情可能吗


Tags: 函数代码inidfortagdictpayload
1条回答
网友
1楼 · 发布于 2024-09-29 20:25:38

我会注意到,是的,使用dict理解是可能的,但是您的代码很好,可读性很强,而且是python式的

无论如何,笔直向前

return {
    decodePayload(TAG_STRING): NBT(ID=itemID, payload=decodePayload(itemID)
    for itemID in iter(functools.partial(decodePayload, ID=TAG_BYTE), 0)
}

但是,由于decodePayload调用的顺序很重要,因此上述最干净的解决方案在3.8以下的Python版本上不起作用

What's New docs开始:

Dict comprehensions have been synced-up with dict literals so that the key is computed first and the value second.

以前,情况并非如此。下面是一个来自Python 3.7解释器的示例:

>>> {print(f'key {i}'):print(f'value {i}') for i in range(3)}
value 0
key 0
value 1
key 1
value 2
key 2
{None: None}

下面是Python 3.8的固定版本:

>>> {print(f'key {i}'):print(f'value {i}') for i in range(3)}
key 0
value 0
key 1
value 1
key 2
value 2
{None: None}

要在以前的版本中强制订购,可以执行以下操作:

return {
    k: v
    for itemID in iter(functools.partial(decodePayload, ID=TAG_BYTE), 0)
    for k, v in [(decodePayload(TAG_STRING), NBT(ID=itemID, payload=decodePayload(itemID))]

}

但老实说,在这一点上,坚持你所拥有的。事实上,我认为你所拥有的一切都很好

相关问题 更多 >

    热门问题