teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2020/07/07 05:26

投稿

8524ba23
8524ba23

スコア38352

answer CHANGED
@@ -13,5 +13,56 @@
13
13
  #1 4 2.0
14
14
  #2 6 8
15
15
  #3 2 1
16
+ ```
16
17
 
18
+ 特定の名前の付いた関数だけ配列として使いたい場合
19
+ --
20
+
21
+ my_func.py
22
+ ```Python
23
+ #変数の2倍
24
+ def mf_multi(x):
25
+ y = x * 2
26
+ return y
27
+
28
+ #変数の1/2
29
+ def mf_div(x):
30
+ y = x / 2
31
+ return y
32
+
33
+ def mf_sum(x):
34
+ y = x + 2
35
+ return y
36
+
37
+ def mf_dif(x):
38
+ y = x - 1
39
+ return y
40
+
41
+ # これは含まれない
42
+ def other_func(x):
43
+ pass
44
+
45
+ # mf_~という名前のついた関数のリストを返す
46
+ def get_func():
47
+ func = []
48
+ for k,v in globals().items():
49
+ if k.startswith('mf_'):
50
+ func.append(v)
51
+ return func
52
+ ```
53
+
54
+ main.py
55
+ ```Python
56
+ import my_func
57
+
58
+ num = [8, 4, 6, 2]
59
+ func = my_func.get_func()
60
+ print(func) # [<function mf_multi at 0x0000020C173DFE58>, <function mf_div at 0x0000020C17426558>, <function mf_sum at 0x0000020C17426798>, <function mf_dif at 0x0000020C17426A68>]
61
+
62
+ for i, n in enumerate(num):
63
+ print(i, n, func[i](n))
64
+ #0 8 16
65
+ #1 4 2.0
66
+ #2 6 8
67
+ #3 2 1
17
68
  ```

2

追記

2020/07/07 05:26

投稿

8524ba23
8524ba23

スコア38352

answer CHANGED
@@ -5,6 +5,8 @@
5
5
  num = [8, 4, 6, 2]
6
6
  func = [my_func.multi, my_func.div, my_func.sum, my_func.dif]
7
7
 
8
+ print(type(my_func.multi)) # <class 'function'>
9
+
8
10
  for i, n in enumerate(num):
9
11
  print(i, n, func[i](n))
10
12
  #0 8 16

1

修正

2020/07/07 05:06

投稿

8524ba23
8524ba23

スコア38352

answer CHANGED
@@ -1,25 +1,9 @@
1
1
  文字列としてではなく関数名をそのまま配列に入れればよいです。
2
2
  ```Python
3
- #変数の2倍
4
- def multi(x):
5
- y = x * 2
6
- return y
3
+ import my_func
7
4
 
8
- #変数の1/2
9
- def div(x):
10
- y = x / 2
11
- return y
12
-
13
- def sum(x):
14
- y = x + 2
15
- return y
16
-
17
- def dif(x):
18
- y = x - 1
19
- return y
20
-
21
5
  num = [8, 4, 6, 2]
22
- func = [multi, div, sum, dif]
6
+ func = [my_func.multi, my_func.div, my_func.sum, my_func.dif]
23
7
 
24
8
  for i, n in enumerate(num):
25
9
  print(i, n, func[i](n))
@@ -27,4 +11,5 @@
27
11
  #1 4 2.0
28
12
  #2 6 8
29
13
  #3 2 1
14
+
30
15
  ```