Because PyArmor puts a header and footer around the original bytecode it doesn't allow you to return anything in the original bytecode because that would mean it wouldn't reach the footer so it doesn't get encrypted again. PyArmor fixed that by jumping to the __armor_exit__ function, which will re-encrypt it and then continue the bytecode to return the value.
Example:
Because PyArmor puts a header and footer around the original bytecode it doesn't allow you to return anything in the original bytecode because that would mean it wouldn't reach the footer so it doesn't get encrypted again. PyArmor fixed that by jumping to the
__armor_exit__
function, which will re-encrypt it and then continue the bytecode to return the value. Example: