Digamos que eu tenha um contêiner arbitrário e uma pergunta para saber se há um elemento nele, veja abaixo.
D = {(1, 2): "whatever"}
if (2, 1) in D:
print( "Impossible" )
O que realmente acontece em termos de código subjacente? alguma função de membro específica, como find(), é chamada?
Além disso, posso usar um cmp/hash personalizado? digamos, se eu quiser comparar apenas a ocorrência de cada número na chave da tupla conforme mostrado no trecho de código, o que posso fazer para conseguir isso?
D = {(1, 2, 1): "whatever"}
if (2, 1, 1) in D:
print( "As expected" ) # How to make it happen?
Um documento oficial do Py será muito apreciado, presumo que seja uma informação bastante fundamental, mas não consigo encontrar uma introdução oficial em lugar nenhum.
Nos bastidores,
x in y
invocay.__contains__(x)
. Portanto, o comportamento depende inteiramente de comotype(y)
o__contains__
método especial é implementado.Este último pode ser surpreendente. Ele não retorna
"hamburger"
, mas nos bastidores outra camada se aplicabool()
ao que__contains__()
realmente retorna.Isso é definido na seção de referência de linguagem 6.10.2. Operações de teste de adesão ; em particular: