Во-первых, обратите внимание, что я понимаю, что ==
используется для сравнения двух выражений, а =
используется для назначения значения переменной. Тем не менее, python - это такой чистый язык с минимальными требованиями к синтаксису, который кажется простым оператором для топора. Также я не пытаюсь начать дискуссию или дискуссию, а скорее узнаю, есть ли что-то, чего я не хватаю, чтобы улучшить свои знания в программировании.
Точно так же (в python) нам не нужно объявлять переменную как int или строку, а язык определяет это на основе назначенного значения, почему оператор «if» просто не определяет, что =
- сравнение, а не задание?
Другим примером является то, что python избавился от многих {} и [] на других языках и просто использовал отступ, потому что отступы и использование фигурных скобок являются излишними. Мне кажется, что if foo == goo:
также избыточен. Но, возможно, есть кое-что, о чем я еще не знаю. Отсюда вопрос!Какова цель оператора '==' при сравнении значений vs '='?
ответ
Один очень простая причина, что питон позволяет логические выражения:
a = b == c
, а также множественное присваивание:
a = b = c
В первом случае a
получает присваивается логическое значение * (True
или False
) в зависимости от того, являются ли b
и c
равными. Во втором случае a
и b
в конечном итоге ссылаются на один и тот же объект (c
). Очевидно, что вы не можете поддерживать как один оператор.
Я полагаю, что вы могли бы (в принципе) перегружать =
только в if
отчетности (поскольку уступка не пускают), но это было бы запутаться - особенно для людей, приезжающих из C
где an assignment is allowed in an if
statement. Чаньской снова побеждает (» Явный лучше, чем неявный »).
- Это на самом деле не должно быть логическое значение. Это на самом деле все, что возвращается
a
«s__eq__
метод (илиb
» s__eq__
если бывший возвращаетсяNotImplemented
) - наиболее объекты возвращают логическое значение, но некоторые из них не (numpy.ndarray
один общий объект, который имеет__eq__
который возвращает другойndarray
, например).
В этом смысле одна строка, содержащая 'b == c' будет делать полное заявление, и, конечно же, это отличается от 'b = c'. +1 – heltonbiker
Спасибо. Имеет смысл. И я согласен, вы бы не хотели изменять его только для операторов. Это противоречит основополагающему принципу поддержания целостности питона. – user2218093
@heltonbiker - Это полностью допустимая точка, особенно из интерактивного приглашения, где 'b == c' - это то же самое, что и' print repr (b == c) '. И, конечно же, давайте не будем забывать, что из-за динамического характера python трудно понять, что 'b' и' c' находятся во время выполнения. У одного из них может быть действительно напуганное '__eq__' с побочными эффектами или еще что-то, поэтому выражение' b == c' может (в принципе) быть «полезным», даже если вы не находитесь в интерактивном приглашении. – mgilson
Эти два оператора могут перекрываться. Например, рассмотрим
a = b = c
который устанавливает a
и b
как к c
и
a = b == c
который устанавливает a
либо True
или False
на основе ли b
и c
равны.
В более общем плане, Python пытается избежать синтаксис, даже, возможно, неоднозначны, чтобы позволить анализатору быть проще. Даже если двусмысленность выше может быть решена, это будет связано с добавлением ряда особых случаев и, как правило, сложностью для анализатора. Непосредственное разделение этих двух операторов позволяет избежать проблемы.
Спасибо. Имеет смысл. – user2218093
- 1. PHP - какова цель оператора [] при использовании пустой
- 2. Какова цель виртуального оператора()() здесь?
- 3. Какова цель? оператора в C#?
- 4. Какова цель унарного оператора + (pos) в Python?
- 5. Какова цель оператора RestrictedBool в QScopedPointer?
- 6. Какова цель оператора + в ассоциированном типе?
- 7. Какова цель унарного оператора Java Java?
- 8. Какова цель оператора FLATTEN в PIG Latin
- 9. Какова цель оператора return в doInBackground() ASynctask?
- 10. Какова цель условного оператора в extrudeGeometry.UVGenerator.generateSideWallUV.
- 11. Какова цель оператора delete в Javascript?
- 12. Какова цель этого побитового оператора AND?
- 13. Какова цель оператора [] при открытии файла в python
- 14. Какова цель character_set_connection?
- 15. Какова цель собственного сертификата?
- 16. Эффективность цикла при сравнении значений (-1,1 vs 1,2)
- 17. Какова цель '\' при создании объекта?
- 18. Какова цель заводов?
- 19. Какова основная логика при сравнении строк?
- 20. Какова рабочая логика '==' при сравнении двух объектов?
- 21. Какова цель "?"
- 22. Какова цель церковного кодирования?
- 23. Какова цель многоуровневой синхронизации?
- 24. Какова цель GeneratedInternalTypeHelper.g.i.cs?
- 25. Какова цель суффикса JSESSIONID?
- 26. Какова цель этого заявления SQL?
- 27. Какова цель glClear (GL_DEPTH_BUFFER_BIT)
- 28. Какова цель BufferOverflowException
- 29. Какова цель HttpHeaders.TryAddWithoutValidation?
- 30. Какова цель sun.jvm.hotspot.HelloWorld?
Это смешно, потому что я только что видел это видео: [Интервью с Тимом Петерсом] (http://www.youtube.com/watch?v=1wAOy88WxmY), где он сказал, что начал работать с Python 0.9.1, где ' = 'знак фактически использовался как для сравнения, так и для назначения – jamylak
Теперь мне нужно посмотреть, что один ... Я не знал, что это когда-либо было. Конечно, когда я начал работать с python, мы были на python2.6 ... С тех пор не изменилось многого (python3.something уже вышел ...) – mgilson