Как я могу получить объект сложения для целых чисел?

#python

#python

Вопрос:

Есть ли в Python какой-либо способ получить объект сложения (operator ) для целых чисел в Python и сохранить его где-нибудь?

Комментарии:

1. Пожалуйста, обратите внимание, что ответ отличается в зависимости от того, нужен ли вам конкретно оператор сложения для целых чисел или общая операция.

2. Чтобы получить связанный метод добавления целого числа, вы должны использовать круглые скобки . , чтобы предотвратить обработку как десятичной точки. например (1).__add__ . Другим способом было бы добавить пробел между 1 и . , например 1 .__add__ , но я думаю, что это слишком неясно.

3. @gnibbler Отличный комментарий. Я расширил принятый ответ на его основе в интересах полного ответа.

Ответ №1:

 >>> int_add = int.__add__
>>> int_add(1, 2)
3
  

Вы также можете использовать operator.add для получения универсальной функции для добавления в Python:

 >>> from operator import add
>>> add(1, 2)
3
>>> add('a', 'b')
'ab'
  

Если вы хотите получить метод сложения определенного целого числа вместо int типа, см. Комментарий gnibbler к вопросу:

Чтобы получить связанный метод добавления целого числа, вы должны использовать круглые скобки, чтобы предотвратить . обрабатывается как десятичная точка. например (1).__add__ . Другим способом было бы добавить пробел между 1 и . , например 1 .__add__ , но я думаю, что это слишком неясно.

Пример:

 >>> one_add = 1 .__add__
>>> one_add(2)
3
  

Комментарии:

1. Этот вариант более правильный. По крайней мере, в некоторых версиях Python int.__add__ is operator.add значение равно false .

2. Когда operator.add вызывается с целым числом в качестве первого аргумента, int.__add__ будет использоваться. For operator.add(a, b) , a.__add__(b) будет вызван, если он реализован, если он не b.__radd__(a) будет предпринят.

3. Добавление к F.J.: подразумевается, что int.__add__ при вызове с нецелыми аргументами произойдет сбой: int.__add__(2, 3.0) вернет строковое значение "NotImplemented" . Итак, если вы уверены, что аргументы всегда будут целыми числами, продолжайте и используйте int.__add__ .

Ответ №2:

 >>> import operator
>>> help(operator.add)
Help on built-in function add in module operator:

add(...)
    add(a, b) -- Same as a   b.
  

Ответ №3:

Вы можете использовать int.__add__ :

 >>> myOperator = int.__add__
>>> myOperator(23,42)
65