cython

Форк
0
/
starargs.pyx 
134 строки · 3.4 Кб
1
cdef sorteditems(d):
2
    return tuple(sorted(d.items()))
3

4

5
def spam(x, y, z):
6
    """
7
    >>> spam(1,2,3)
8
    (1, 2, 3)
9
    >>> spam(1,2)
10
    Traceback (most recent call last):
11
    TypeError: spam() takes exactly 3 positional arguments (2 given)
12
    >>> spam(1,2,3,4)
13
    Traceback (most recent call last):
14
    TypeError: spam() takes exactly 3 positional arguments (4 given)
15
    >>> spam(1,2,3, a=1)
16
    Traceback (most recent call last):
17
    TypeError: spam() got an unexpected keyword argument 'a'
18
    """
19
    return (x, y, z)
20

21
def grail(x, y, z, *a):
22
    """
23
    >>> grail(1,2,3)
24
    (1, 2, 3, ())
25
    >>> grail(1,2,3,4)
26
    (1, 2, 3, (4,))
27
    >>> grail(1,2,3,4,5,6,7,8,9)
28
    (1, 2, 3, (4, 5, 6, 7, 8, 9))
29
    >>> grail(1,2)
30
    Traceback (most recent call last):
31
    TypeError: grail() takes at least 3 positional arguments (2 given)
32
    >>> grail(1,2,3, a=1)
33
    Traceback (most recent call last):
34
    TypeError: grail() got an unexpected keyword argument 'a'
35
    """
36
    return (x, y, z, a)
37

38
def swallow(x, y, z, **k):
39
    """
40
    >>> swallow(1,2,3)
41
    (1, 2, 3, ())
42
    >>> swallow(1,2,3,4)
43
    Traceback (most recent call last):
44
    TypeError: swallow() takes exactly 3 positional arguments (4 given)
45
    >>> swallow(1,2,3, a=1, b=2)
46
    (1, 2, 3, (('a', 1), ('b', 2)))
47
    >>> swallow(1,2,3, x=1)
48
    Traceback (most recent call last):
49
    TypeError: swallow() got multiple values for keyword argument 'x'
50
    """
51
    return (x, y, z, sorteditems(k))
52

53
def creosote(x, y, z, *a, **k):
54
    """
55
    >>> creosote(1,2,3)
56
    (1, 2, 3, (), ())
57
    >>> creosote(1,2,3,4)
58
    (1, 2, 3, (4,), ())
59
    >>> creosote(1,2,3, a=1)
60
    (1, 2, 3, (), (('a', 1),))
61
    >>> creosote(1,2,3,4, a=1, b=2)
62
    (1, 2, 3, (4,), (('a', 1), ('b', 2)))
63
    >>> creosote(1,2,3,4, x=1)
64
    Traceback (most recent call last):
65
    TypeError: creosote() got multiple values for keyword argument 'x'
66
    """
67
    return (x, y, z, a, sorteditems(k))
68

69
def onlyt(*a):
70
    """
71
    >>> onlyt(1)
72
    (1,)
73
    >>> onlyt(1,2)
74
    (1, 2)
75
    >>> onlyt(a=1)
76
    Traceback (most recent call last):
77
    TypeError: onlyt() got an unexpected keyword argument 'a'
78
    >>> onlyt(1, a=2)
79
    Traceback (most recent call last):
80
    TypeError: onlyt() got an unexpected keyword argument 'a'
81
    >>> test_no_copy_args(onlyt)
82
    True
83
    """
84
    return a
85

86
def onlyk(**k):
87
    """
88
    >>> onlyk(a=1)
89
    (('a', 1),)
90
    >>> onlyk(a=1, b=2)
91
    (('a', 1), ('b', 2))
92
    >>> onlyk(1)
93
    Traceback (most recent call last):
94
    TypeError: onlyk() takes exactly 0 positional arguments (1 given)
95
    >>> onlyk(1, 2)
96
    Traceback (most recent call last):
97
    TypeError: onlyk() takes exactly 0 positional arguments (2 given)
98
    >>> onlyk(1, a=1, b=2)
99
    Traceback (most recent call last):
100
    TypeError: onlyk() takes exactly 0 positional arguments (1 given)
101
    """
102
    return sorteditems(k)
103

104
def tk(*a, **k):
105
    """
106
    >>> tk(a=1)
107
    (('a', 1),)
108
    >>> tk(a=1, b=2)
109
    (('a', 1), ('b', 2))
110
    >>> tk(1)
111
    (1,)
112
    >>> tk(1, 2)
113
    (1, 2)
114
    >>> tk(1, a=1, b=2)
115
    (1, ('a', 1), ('b', 2))
116
    """
117
    return a + sorteditems(k)
118

119
def t_kwonly(*a, k):
120
    """
121
    >>> test_no_copy_args(t_kwonly, k=None)
122
    True
123
    """
124
    return a
125

126

127
def test_no_copy_args(func, **kw):
128
    """
129
    func is a function such that func(*args, **kw) returns args.
130
    We test that no copy is made of the args tuple.
131
    This tests both the caller side and the callee side.
132
    """
133
    args = (1, 2, 3)
134
    return func(*args, **kw) is args
135

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

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

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

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