cython

Форк
0
/
cpdef_optargs.pyx 
92 строки · 1.8 Кб
1
# mode: run
2
# tag: cyfunction
3
# cython: binding=True
4

5
cimport cython
6

7

8
class PyClass(object):
9
    a = 2
10

11

12
class PyClass99(object):
13
    a = 99
14

15
    def pymethod(self, x, y=1, z=PyClass):
16
        """
17
        >>> obj = PyClass99()
18
        >>> obj.pymethod(0)
19
        (0, 1, 2)
20
        """
21
        return x, y, z.a
22

23

24
cdef class CyClass:
25
    cpdef cpmethod(self, x, y=1, z=PyClass):
26
        """
27
        >>> obj = CyClass()
28
        >>> obj.cpmethod(0)
29
        (0, 1, 2)
30
        >>> obj.cpmethod(0, 3)
31
        (0, 3, 2)
32
        >>> obj.cpmethod(0, 3, PyClass)
33
        (0, 3, 2)
34
        >>> obj.cpmethod(0, 3, 5)
35
        Traceback (most recent call last):
36
        AttributeError: 'int' object has no attribute 'a'
37
        """
38
        return x, y, z.a
39

40
    y_value = 3
41
    p_class = PyClass
42

43
    cpdef cpmethod2(self, x, y=y_value, z=p_class):
44
        """
45
        >>> obj = CyClass()
46
        >>> obj.cpmethod2(0)
47
        (0, 3, 2)
48
        """
49
        return x, y, z.a
50

51
    def pymethod(self, x, y=y_value, z=p_class):
52
        """
53
        >>> obj = CyClass()
54
        >>> obj.pymethod(0)
55
        (0, 3, 2)
56
        """
57
        return x, y, z.a
58

59
    # change values to check that defaults above stay unmodified
60
    y_value = 98
61
    p_class = PyClass99
62

63

64
cpdef func(x, y=1, z=PyClass):
65
    """
66
    >>> func(0)
67
    (0, 1, 2)
68
    >>> func(0, 3)
69
    (0, 3, 2)
70
    >>> func(0, 3, PyClass)
71
    (0, 3, 2)
72
    >>> func(0, 3, 5)
73
    Traceback (most recent call last):
74
    AttributeError: 'int' object has no attribute 'a'
75
    """
76
    return x, y, z.a
77

78

79
@cython.ccall
80
def pyfunc(x, y=1, z=PyClass):
81
    """
82
    >>> pyfunc(0)
83
    (0, 1, 2)
84
    >>> pyfunc(0, 3)
85
    (0, 3, 2)
86
    >>> pyfunc(0, 3, PyClass)
87
    (0, 3, 2)
88
    >>> pyfunc(0, 3, 5)
89
    Traceback (most recent call last):
90
    AttributeError: 'int' object has no attribute 'a'
91
    """
92
    return x, y, z.a
93

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

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

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

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