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

回答編集履歴

2

質問文を読み直して変更

2021/02/08 07:12

投稿

ppaul
ppaul

スコア24672

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

1

修正

2021/02/08 07:12

投稿

ppaul
ppaul

スコア24672

answer CHANGED
@@ -1,7 +1,39 @@
1
- 以下取得でき
1
+ 誤りがあったの修正しした
2
- なお、対話モードの場合は、<module '__main__' (built-in)>が返ります。
3
2
 
3
+ モジュール名というのが、モジュールの名前属性であるのか、ファイル名であるのかで答えが違います。
4
+
5
+ モジュールの名前属性であれば、
6
+
4
7
  ```python
5
8
  import sys
6
- print(sys.modules[__name__])
9
+ print(sys.modules[__name__].__name__)
7
- ```
10
+ ```
11
+ です。
12
+
13
+ $ python -m ファイル名.py
14
+ の場合は、ファイル名が表示されます。
15
+
16
+ $ python ファイル名.py
17
+ の場合は、常に'__main__'となっています。
18
+ Linuxでファイルに実行属性をつけてて以下のように実行した場合も
19
+ $ ./ファイル名.py
20
+ 常に'__main__'となっています。
21
+
22
+ モジュールのファイル名であれば、
23
+ $ python ファイル名.py
24
+ の場合や
25
+ $ ./ファイル名.py
26
+ の場合は
27
+ ```python
28
+ import sys
29
+ print(sys.modules[__name__].__file__)
30
+ ```
31
+ です。
32
+
33
+ $ python -m ファイル名.py
34
+ の場合は
35
+ ```python
36
+ import sys
37
+ print(sys.modules[__name__].__name__)
38
+ ```
39
+ です。