2013-02-08 2 views
3

Посмотрите на мой Python сессии:Это выражение истинно в Python: {} .keys(). Insert (0, "") == None. Зачем?

 
>>> {}.keys().insert(0, "") == None 
True 

но:

 
>>> k = {}.keys() 
>>> k 
[] 
>>> k.insert(0, "") 
>>> k 
[''] 

Почему ??

PS. Спасибо за помощь! Python имеет очень странный дизайн - не поддерживает цепочки:

То есть корень моей проблемы ...

+2

Python поддерживает метод цепочки * на неизменные объекты. * На изменяемых объектов, как списки, это создало бы путаницу, был ли новый объект возвращается или существующий один из них мутировали. Тот факт, что такие методы на изменяемых объектах возвращают 'None', сразу позволяет вам знать, что существующий объект мутировался, и если ваше предположение в противном случае, вы обнаружите очень быстро, когда вы запускаете код, а не когда вам нужно отслеживать вниз из-за сложных ошибок, возникающих из-за вашего ложного предположения. – kindall

+0

@kindall. спасибо за объяснение, потому что я начинаю думать, почему Python не обеспечивает цепочку ... +1 – gavenkoa

ответ

10

list.insertвозвращаетNone; когда вы печатаете k, вы печатаете новое состояние списка.

2

Вы проверяете тип возврата на None в случае 1, который будет оцениваться до True. Python insert возвращает None

Смежные вопросы