On Sat, 12 Mar 2016 11:10 pm, Chris Angelico wrote: > On Sat, Mar 12, 2016 at 10:08 PM, BartC <b...@freeuk.com> wrote: >>>> You're not mistaken. There are no "character constants" in Python. >>>> (Note that the definition would be Unicode codepoints, rather than >>>> ASCII values.) I don't often miss them, though. >> >>> Yes, a complete non-issue. >> >> >> Really? The issue as I see it is this: >> >> Writing: a=65 generates this byte-code for the right-hand-side: >> >> LOAD_CONST 1 (65) An integer >> >> But writing instead: a=ord('A') generates this: >> >> LOAD_GLOBAL 0 (ord) >> LOAD_CONST 1 ('A') A string >> CALL_FUNCTION 1 > > I think the "non-issue" here is the difference between ASCII and > Unicode. Either way, there's no way to say "the integer with the > codepoint of this character" as a literal. But that's actually not > even all that necessary, because subscripting a text string yields > one-character strings - you almost never need the ordinals. > > Subscripting a byte string in Py3 yields integers, so you might need > ordinals for ASCII byte values. But you can get them the same way: > >>>> dis.dis(lambda: b"a"[0]) > 1 0 LOAD_CONST 3 (97) > 3 RETURN_VALUE >>>> dis.dis(lambda: u"a"[0]) > 1 0 LOAD_CONST 3 ('a') > 3 RETURN_VALUE > > Whichever one you need, you can get as a compile-time constant.
Chris, what you're looking at is the result of the CPython keyhole optimizer doing constant folding. That is **NOT** a language promise. Other implementations of Python may lack the keyhole optimizer. Future versions may remove it, or allow the user to disable it. Python the language has no feature that *guarantees* that you can write 'a' and get 97 as a compile-time constant. -- Steven -- https://mail.python.org/mailman/listinfo/python-list