cython

Форк
0
/
cpdef_method_override_recursion.pyx 
66 строк · 920.0 Байт
1
# mode: run
2
# tag: cpdef
3

4
# This also makes a nice benchmark for the cpdef method call dispatching code.
5

6
cdef class Ext:
7
    """
8
    >>> x = Ext()
9
    >>> x.rec(10)
10
    0
11
    """
12
    cpdef rec(self, int i):
13
        return 0 if i < 0 else self.rec(i-1)
14

15

16
class Py(Ext):
17
    """
18
    >>> p = Py()
19
    >>> p.rec(10)
20
    0
21
    """
22
    pass
23

24

25
class Slots(Ext):
26
    """
27
    >>> s = Slots()
28
    >>> s.rec(10)
29
    0
30
    """
31
    __slots__ = ()
32

33

34
class PyOverride(Ext):
35
    """
36
    >>> p = PyOverride()
37
    >>> p.rec(10)
38
    10
39
    5
40
    >>> p.rec(12)
41
    12
42
    11
43
    10
44
    5
45
    """
46
    def rec(self, i):
47
        print(i)
48
        return Ext.rec(self, i) if i > 10 else 5
49

50

51
class SlotsOverride(Ext):
52
    """
53
    >>> s = SlotsOverride()
54
    >>> s.rec(10)
55
    10
56
    6
57
    >>> s.rec(12)
58
    12
59
    11
60
    10
61
    6
62
    """
63
    __slots__ = ()
64
    def rec(self, i):
65
        print(i)
66
        return Ext.rec(self, i) if i > 10 else 6
67

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

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

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

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