람다 플러그인 Python¶
모듈명¶
《Python Interpreter》 를 직접 실행 했을 경우 __main__
모듈로 으로 실행되는 루틴과 구분하기 위해
《엔서》 의 람다는 《Answer Python Plugin》 의 약자인 __app__
을 사용합니다.
다음과 같은 진입점을 추가할 수 있습니다.
1if __name__ == '__app__'
2 pass
참고
이 기능은 1.1.8
버전 부터 작동 합니다.
on_run¶
1def on_run(array):
2 return {
3 "result": array[slices]
4 }
람다를 실행할 구현부 입니다. (위의 예제는 array
입력과 result
출력을 갖는 람다 입니다.)
JSON 의 controls.input 슬롯 이름을 인자로 구현해야 합니다.
또한 JSON 의 controls.output 슬롯 이름을 키 값으로 dict
타입을 반환해야 합니다.
Full example¶
다음은 numpy slice 예제 입니다.
1# -*- coding: utf-8 -*-
2
3import numpy as np
4
5slices = list()
6
7
8def int_or_none(val):
9 return int(val) if val else None
10
11
12def str_to_slice(val):
13 result = list()
14 for s in str(val).split(':'):
15 result.append(int_or_none(s))
16 return result
17
18
19def str_to_slices(val):
20 result = list()
21 for s in str(val).split(','):
22 result.append(str_to_slice(s))
23 return result
24
25
26def slice_to_str(val):
27 if len(val) == 0:
28 return '::'
29 elif len(val) == 1:
30 return str(val[0])
31 elif len(val) == 2:
32 return f'{val[0]}:{val[1]}'
33 elif len(val) == 3:
34 return ','.join(val)
35 else:
36 raise IndexError('A slice must have 3 or fewer elements.')
37
38
39def slices_to_str(val):
40 ','.join(list(slice_to_str(x) for x in val))
41
42
43def on_set(key, val):
44 if key == 'slices':
45 global slices
46 slices = str_to_slices(val)
47
48
49def on_get(key):
50 if key == 'slices':
51 return slices_to_str(slices)
52
53
54def on_init():
55 return True
56
57
58def on_valid():
59 return True
60
61
62def on_run(array):
63 return {
64 "result": array[slices]
65 }
66
67
68def on_destroy():
69 pass
70
71
72if __name__ == '__app__':
73 pass