Как можно оценить +5 в Python?

Как оценивает + 5 работу (оповещение о спойлере: результат 5)?

Разве это не работает + , вызвав метод __add__ ? 5 будет « other » в:

 >>> other = 5 >>> x = 1 >>> x.__add__(other) 6 

Так что же такое «пустота», которая позволяет добавить 5?

void.__add__(5)

Другой ключ заключается в том, что:

 / 5 

выдает ошибку:

 TypeError: 'int' object is not callable 

3 Solutions collect form web for “Как можно оценить +5 в Python?”

+ В этом случае вызывает унарный магический метод __pos__ а не __add__ :

 >>> class A(int): def __pos__(self): print '__pos__ called' return self ... >>> a = A(5) >>> +a __pos__ called 5 >>> +++a __pos__ called __pos__ called __pos__ called 5 

Python поддерживает только 4 (унарные арифметические операции) из них __neg__ , __pos__ , __abs__ и __invert__ , поэтому SyntaxError с / . Обратите внимание, что __abs__ работает со встроенной функцией abs() , т.е. нет оператора для этой унарной операции.


Обратите внимание, что /5 ( / за которым следует что-то) интерпретируется по-разному только оболочкой IPython, для нормальной оболочки она является синтаксической ошибкой, как ожидалось:

 Ashwinis-MacBook-Pro:py ashwini$ ipy Python 2.7.6 (default, Sep 9 2014, 15:04:36) Type "copyright", "credits" or "license" for more information. IPython 3.0.0 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. >>> /5 Traceback (most recent call last): File "<ipython-input-1-2b14d13c234b>", line 1, in <module> 5() TypeError: 'int' object is not callable >>> /float 1 1.0 >>> /sum (1 2 3 4 5) 15 

 Ashwinis-MacBook-Pro:~ ashwini$ python Python 2.7.6 (default, Sep 9 2014, 15:04:36) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> /5 File "<stdin>", line 1 /5 ^ SyntaxError: invalid syntax >>> /float 1 File "<stdin>", line 1 /float 1 ^ SyntaxError: invalid syntax 

Похоже, вы нашли один из трех унарных операторов :

  • Унарная операция плюс +x вызывает метод __pos __ () .
  • Унарная операция отрицания -x вызывает метод __neg __ () .
  • Операция unary not (or invert) ~x вызывает метод __invert __ () .

По языковой ссылке на числовые литералы :

Обратите внимание, что числовые литералы не содержат знака; фраза типа -1 на самом деле является выражением, состоящим из унарного оператора, и буква 1 .

А раздел о унарных операторах :

Оператор унарного (минус) дает отрицание его числового аргумента.

Оператор unary + (plus) дает свой числовой аргумент без изменений.

Не существует унарного / (делящего) оператора, следовательно, ошибки.

Связанные «магические методы» ( __pos__ , __neg__ ) рассматриваются в документации по модели данных .

  • Является ли поведение списка Python + = iterable документированным в любом месте?
  • Используйте строку (представляющую логический оператор) в выражении Python
  • Символ Asterisk в Python
  • маленький язык в python
  • Неклассичность при изменении поведения клонирования
  • Python - лучший язык программирования в мире.