cython

Форк
0
/
special_methods_T561_py38.pyx 
48 строк · 1.1 Кб
1
# mode: run
2

3
from cpython.number cimport PyNumber_InPlacePower
4

5
def ipow(a, b, c):
6
    # As far as DW can tell, calling through this C API call is the
7
    # only way to actually use ternary __ipow__
8
    return PyNumber_InPlacePower(a, b, c)
9

10
# three-arg ipow can only work safely on Py3.8+
11
# and so tests are in a separate file
12

13
cdef class TwoOrThreeArgIPow:
14
    """
15
    >>> a = TwoOrThreeArgIPow('a')
16
    >>> a**=2
17
    >>> print(a)
18
    a**2[None]
19
    >>> print(ipow(TwoOrThreeArgIPow('a'), 'x', 'y'))
20
    a**x[y]
21
    """
22
    cdef str name
23

24
    def __init__(self, name):
25
        self.name = name
26

27
    def __ipow__(self, other, base=None):
28
        return f"{self.name}**{other}[{base}]"
29

30

31
cdef class ThreeArgIPow:
32
    """
33
    Note that it's not possible to detect if this is called in a 2-arg context
34
    since the Python interpreter just passes None
35
    >>> a = ThreeArgIPow('a')
36
    >>> a**=2
37
    >>> print(a)
38
    a**2[None]
39
    >>> print(ipow(ThreeArgIPow('a'), 'x', 'y'))
40
    a**x[y]
41
    """
42
    cdef str name
43

44
    def __init__(self, name):
45
        self.name = name
46

47
    def __ipow__(self, other, base):
48
        return f"{self.name}**{other}[{base}]"
49

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.