On 17/08/2020 3:08 pm, Henk-Jaap Wagenaar wrote:
> Thanks for having a look! The example now looks like (looking at int
> case only, same applies to UID):
>
> case int():
> if value < 0:
> try:
> self._fp.write(struct.pack('>Bq', 0x13, value))
> except struct.error:
> raise OverflowError(value) from None
> elif value < 1 << 8:
> self._fp.write(struct.pack('>BB', 0x10, value))
> ...
> elif value < 1 << 64:
> self._fp.write(b'\x14' + value.to_bytes(16, 'big', signed=True))
> else:
> raise OverflowError(value)
>
> I was more thinking it would read/look something like:
>
> case int() if value < 0:
> try:
> self._fp.write(struct.pack('>Bq', 0x13, value))
> except struct.error:
> raise OverflowError(value) from None
> case int() if value < 1 << 8:
> self._fp.write(struct.pack('>BB', 0x10, value))
> ...
> case int() if value < 1 << 64:
> self._fp.write(b'\x14' + value.to_bytes(16, 'big', signed=True))
> case int():
> raise OverflowError(value)
>
> Which I think works as expected under the current PEP622?
That would work, but would be slower for the reference implementation
due to the repeated `isinstance(value, int)` checks.
The PEP allows the compiler to generate optimized code that only checks once.
I think the repeated `int()` cases do not help readability.
Which form do you think is more readable?
I find Henk-Jaap's version better, because the case blocks show the structure of the code better.
--