I like c'x'. It's easy to read and very explicitly constant and clear what the value is 'x'. (Some other letter instead of 'c' would be fine as well.)
> if bytesdata[i] == 121: # ord('x')
because it looks a heck of a lot like:
> if bytesdata[i] == 120: # ord('x')
and only one of those is correct. That's a very easy bug to miss. I like it even less without the comment.
I don't care for:
> if bytesdata[i] == ord('x'):
because while ord is a builtin, it's not invulnerable to being changed. In contrast, string constants and numbers are truly constant.
I recognize that the compiler can optimize:
> if bytesdata[i] == b'x'[0]:
but that looks like chicken scratches to me.
Someone suggested using 0'x' which I don't quite get. It looks too much like 0x to me and the I've always read the leading zero to mean 'this is a number'.
Also, this was raised in the context of bytes and not all characters fit in a byte. So
c'Ä'
ord('Ä')
work but
b'Ä'[0]
won't.
Is there a learning curve? Yes, but minor IMHO and if you don't know it, it's obvious when you see it that you don't know it.