4 ms·
That'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
by TkTech 6y ago
That'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.