1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
# mode: run
# tag: closures
# ticket: gh-1797
def func():
"""
>>> funcs = func()
>>> [f(1) for f in funcs] # doctest: +NORMALIZE_WHITESPACE
['eq',
'str',
'weakref',
'new',
'getitem',
'setitem',
'delitem',
'getslice',
'setslice',
'delslice_',
'getattr',
'getattribute',
'setattr',
'delattr',
'get',
'set',
'delete',
'dict',
'dealloc',
'cinit']
"""
def __eq__(a):
return 'eq'
def __str__(a):
return 'str'
def __weakref__(a):
return 'weakref'
def __new__(a):
return 'new'
def __getitem__(a):
return 'getitem'
def __setitem__(a):
return 'setitem'
def __delitem__(a):
return 'delitem'
def __getslice__(a):
return 'getslice'
def __setslice__(a):
return 'setslice'
def __delslice__(a):
return 'delslice_'
def __getattr__(a):
return 'getattr'
def __getattribute__(a):
return 'getattribute'
def __setattr__(a):
return 'setattr'
def __delattr__(a):
return 'delattr'
def __get__(a):
return 'get'
def __set__(a):
return 'set'
def __delete__(a):
return 'delete'
def __dict__(a):
return 'dict'
def __dealloc__(a):
return 'dealloc'
def __cinit__(a):
return 'cinit'
def list_from_gen(g):
return list(g)
# move into closure by using inside of generator expression
return list_from_gen([
__eq__,
__str__,
__weakref__,
__new__,
__getitem__,
__setitem__,
__delitem__,
__getslice__,
__setslice__,
__delslice__,
__getattr__,
__getattribute__,
__setattr__,
__delattr__,
__get__,
__set__,
__delete__,
__dict__,
__dealloc__,
__cinit__,
][i] for i in range(20))
|