Recentemente, tive a chance de ouvir uma palestra sobre boas e más práticas de programação C. Nele, em particular, o tópico de decodificação de código de programa de 
aparência engraçada ( 
emoticons em C) foi abordado. Houve um debate sobre a conveniência de usar esse código confuso para testar as habilidades de um candidato a uma posição de programador durante as entrevistas. A disputa não levou a um consenso.
Considere uma possível pergunta sobre 
emoticons durante uma entrevista para uma posição que implica conhecimento da linguagem de programação Python.

Desafio
Existem duas expressões:
- _+_
 
-  - _|_
 
Qual dessas duas expressões provavelmente levará a erros e por quê?
Notas de ExpressãoDeve-se notar que essas expressões são mal lidas, não é aconselhável usar essas expressões no código de trabalho, mas só podem ser usadas como quebra-cabeças.
Você também precisa se lembrar de que os 
emoticons na tarefa não são gravados 
pythonically (não estão de acordo com o padrão de estilo 
PEP 8 ).
 Solução
No Python, o sublinhado não é uma 
palavra - 
chave ; portanto, em geral, pode ser usado para atribuir determinados valores a variáveis.
A tarefa é reduzida à consideração de casos de erros durante a adição e com “bit a bit ou” (por uma questão de brevidade, simplesmente “ou”) uma variável. I.e. pesquisar tipos internos do Python (classes) para os quais uma operação é implementada e pesquisar tipos internos nos quais outra operação é implementada.
No console do Python, é fácil verificar se há valores de sublinhado, tais como:
- Não há erro na avaliação de cada expressão-  - >>> _ = 10 >>> _+_ 20 >>> _ = 10 >>> _|_ 10
 
 
- Não há erro ao avaliar a primeira expressão-  - >>> _ = '10' >>> _+_ '1010' >>> _ = '10' >>> _|_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for |: 'str' and 'str'
 
 
- Não há erro no cálculo da segunda expressão-  - >>> _ = {1, 0} >>> _+_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'set' and 'set' >>> _|_ {0, 1}
 
 
- Há um erro no cálculo de cada expressão-  - >>> _ = {1: 0} >>> _+_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'dict' and 'dict' >>> _|_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for |: 'dict' and 'dict'
 
 
A mágica do Python é que a implementação de adições e “ou” e outros operadores está nos chamados 
“métodos mágicos” descritos para as classes necessárias.
Além disso, este é o método
 __add__ 
Para "ou", este é um método
 __or__ 
O nome de cada método mágico contém sublinhados, dois no início e no final da palavra correspondente.
Localizando informações sobre as classes internas do Python.Você pode tentar encontrar as informações necessárias na documentação para tipos internos no site oficial do Python: 
https://docs.python.org/3.7/library/stdtypes.html .
Você pode executar em um terminal Python
 >>> import builtins >>> help(builtins) 
Prefiro usar a documentação da versão exata do Python que estou usando atualmente, referindo-se à interface da web do módulo pydoc.
Para fazer isso, no prompt de comando, digite, por exemplo:
 python3 -m pydoc -p 3344 
e abra o módulo de documentação do navegador 
http: // localhost: 3344 / builtins.html .
 Classes internas para as quais nossos métodos são implementados:
Nove classes internas implementam a operação de adição e quatro implementam o "ou".
Além disso, você pode tentar especular sobre a frequência do uso de classes base em projetos reais, sobre classes não básicas e a implementação dos métodos acima para elas. É provável que isso seja apreciado positivamente durante a entrevista.
Resposta 1.A segunda expressão geralmente leva a um erro.
 
Possíveis perguntas adicionais sobre a entrevista sublinhada
Qual é o papel do sublinhado na nomeação de objetos?
Resposta 2.O sublinhado pode ser usado para separar palavras em 
diferentes estilos de nomeação de entidades no Python :
- Ao nomear em minúsculas
 
  lower_case_with_underscores
 
- Ao nomear em maiúsculas
 
  UPPER_CASE_WITH_UNDERSCORES
 
Alguns nomes limitados a sublinhados são 
reservados :
- Com um sublinhado no início de um nome, ele não é importado durante a importação geral
 
  from module import *
 
- Com dois sublinhados nos dois lados do nome é considerado sistêmico, não é recomendável usar esses nomes para outros fins
- Com dois sublinhados no início de um nome, é considerado privado (não público) para a classe
 Qual é o papel de um único sublinhado?
Resposta 3.No intérprete, se o sublinhado não tiver sido explicitamente usado como variável, ele armazenará o resultado da última ação sem erros exibida na tela.
 $ python3 Python 3.6.8 (default, Feb 14 2019, 22:09:48) [GCC 7.4.0] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> _ Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name '_' is not defined >>> 2 * 5 10 >>> _ 10 >>> _ = 1 >>> _ 1 >>> 2 * 5 10 >>> _ 1 
Isso ocorre porque o 
sys.stdout está escapando com o 
displayhook . Veja um exemplo da 
documentação oficial :
 def displayhook(value): if value is None: return  
Além disso, um único sublinhado é comumente usado para conveniência da 
internalização .