回答編集履歴

2

質問文を読み直して変更

2021/02/08 07:12

投稿

ppaul
ppaul

スコア24670

test CHANGED
@@ -1,3 +1,67 @@
1
+ やりたいことが、
2
+
3
+ print(inspect.getmembers(my_module, inspect.isfunction))
4
+
5
+ であるというのを読んでいませんでした。
6
+
7
+
8
+
9
+ それでしたら、以下です。
10
+
11
+
12
+
13
+ ```python
14
+
15
+ import sys
16
+
17
+ import inspect
18
+
19
+
20
+
21
+ print(inspect.getmembers(sys.modules[__name__], inspect.isfunction))
22
+
23
+ ```
24
+
25
+ ただ、もう一つの質問の回答で書いたように、unknown_userさんが欲しいものが出てくる保証はありません。
26
+
27
+
28
+
29
+ ```python
30
+
31
+ >>> import sys
32
+
33
+ >>> import inspect
34
+
35
+
36
+
37
+ >>> def f():
38
+
39
+ ... pass
40
+
41
+ ...
42
+
43
+ >>> from glob import glob
44
+
45
+ >>> print(inspect.getmembers(sys.modules[__name__], inspect.isfunction))
46
+
47
+ [('f', <function f at 0x000001EFFD659EE0>), ('glob', <function glob at 0x000001EFFA7D1280>)]
48
+
49
+ ```
50
+
51
+ これが起きるのは、globのような標準モジュールの中にもユーザ定義関数globが入っていることと、from モジュール import 名前
52
+
53
+ を実行したときに、その名前は現在のモジュールのグローバル変数として登録されるためです。
54
+
55
+
56
+
57
+
58
+
59
+ -------------------------------------
60
+
61
+ 以下は関係なかったようですが参考のために残しておきます。
62
+
63
+
64
+
1
65
  誤りがあったので修正しました。
2
66
 
3
67
 
@@ -22,7 +86,7 @@
22
86
 
23
87
 
24
88
 
25
- $ python -m ファイル名.py
89
+ $ python - ファイル名.py
26
90
 
27
91
  の場合は、ファイル名が表示されます。
28
92
 

1

修正

2021/02/08 07:12

投稿

ppaul
ppaul

スコア24670

test CHANGED
@@ -1,6 +1,12 @@
1
- 以下取得でき
1
+ 誤りがあったの修正しした
2
2
 
3
+
4
+
3
- なお対話モー場合は<module '__main__' (built-in)>返ります。
5
+ モジュール名というのが、モジュ名前属性であるのかファイル名であるのかで答え違います。
6
+
7
+
8
+
9
+ モジュールの名前属性であれば、
4
10
 
5
11
 
6
12
 
@@ -8,6 +14,64 @@
8
14
 
9
15
  import sys
10
16
 
11
- print(sys.modules[__name__])
17
+ print(sys.modules[__name__].__name__)
12
18
 
13
19
  ```
20
+
21
+ です。
22
+
23
+
24
+
25
+ $ python -m ファイル名.py
26
+
27
+ の場合は、ファイル名が表示されます。
28
+
29
+
30
+
31
+ $ python ファイル名.py
32
+
33
+ の場合は、常に'__main__'となっています。
34
+
35
+ Linuxでファイルに実行属性をつけてて以下のように実行した場合も
36
+
37
+ $ ./ファイル名.py
38
+
39
+ 常に'__main__'となっています。
40
+
41
+
42
+
43
+ モジュールのファイル名であれば、
44
+
45
+ $ python ファイル名.py
46
+
47
+ の場合や
48
+
49
+ $ ./ファイル名.py
50
+
51
+ の場合は
52
+
53
+ ```python
54
+
55
+ import sys
56
+
57
+ print(sys.modules[__name__].__file__)
58
+
59
+ ```
60
+
61
+ です。
62
+
63
+
64
+
65
+ $ python -m ファイル名.py
66
+
67
+ の場合は
68
+
69
+ ```python
70
+
71
+ import sys
72
+
73
+ print(sys.modules[__name__].__name__)
74
+
75
+ ```
76
+
77
+ です。