5 ms·
But you are free to do if title == user_input.upper(): That is, you convert a string to upper without binding the result to a name. You just use it in-place
by diarrhea 6y ago
But you are free to do
if title == user_input.upper():
That is, you convert a string to upper without binding the result to a name. You just use it in-place and discard the result, which is fine.
With compiler, you mean mypy or linters?
- TkTech 6y agoThat's still "using" the resulting value for a comparison. CPython isn't an optimizing compiler, or it would completely remove the call to upper(). >>> def up(v): ... v.upper() ... >>> dis.dis(up) 2 0 LOAD_FAST 0 (v) 2 LOAD_METHOD 0 (upper) 4 CALL_METHOD 0 6 POP_TOP 8 LOAD_CONST 0 (None) 10 RETURN_VALUE >>> def up(v): ... if v.upper() == "HelloWorld": ... return True ... >>> dis.dis(up) 2 0 LOAD_FAST 0 (v) 2 LOAD_METHOD 0 (upper) 4 CALL_METHOD 0 6 LOAD_CONST 1 ('HelloWorld') 8 COMPARE_OP 2 (==) 10 POP_JUMP_IF_FALSE 16 3 12 LOAD_CONST 2 (True) 14 RETURN_VALUE >> 16 LOAD_CONST 0 (None) 18 RETURN_VALUE Notice in the first example, right after CALL_METHOD the return value on the stack is just immediately POP'd away. The parent is saying that when you run `python example.py` CPython should see that the return value is never used and emit a warning. This would only happen because `upper()` was manually marked using the suggested `must_use` annotation.
- delaaxe 6y agoHe meant that writing a line of code with only contents: msg.upper() should trigger a warning as this clearly doesn't do anything.