回答編集履歴

1

追記

2020/03/07 04:13

投稿

quickquip
quickquip

スコア11235

test CHANGED
@@ -1,3 +1,617 @@
1
1
  モジュール`matplotlib`は`pyplot`という名前の属性を持っていない
2
2
 
3
3
  と解釈すればいいです。
4
+
5
+
6
+
7
+ ----
8
+
9
+ 回答に誤認が合ったので追記します。
10
+
11
+
12
+
13
+ > しかしdir()関数を使って、dir(matplotlib)にて、その中身を一覧してみると、pyplotは見当たりません。
14
+
15
+
16
+
17
+
18
+
19
+ というのは正しくありません。
20
+
21
+
22
+
23
+ 確かに、
24
+
25
+ ```plain
26
+
27
+ >>> import matplotlib
28
+
29
+
30
+
31
+ >>> from pprint import pprint
32
+
33
+
34
+
35
+ >>> pprint(dir(matplotlib))
36
+
37
+ ['LooseVersion',
38
+
39
+ 'MatplotlibDeprecationWarning',
40
+
41
+ 'MutableMapping',
42
+
43
+ 'Parameter',
44
+
45
+ 'Path',
46
+
47
+ 'RcParams',
48
+
49
+ 'URL_REGEX',
50
+
51
+ '_DATA_DOC_APPENDIX',
52
+
53
+ '_DATA_DOC_TITLE',
54
+
55
+ '_ExecInfo',
56
+
57
+ '__bibtex__',
58
+
59
+ '__builtins__',
60
+
61
+ '__cached__',
62
+
63
+ '__doc__',
64
+
65
+ '__file__',
66
+
67
+ '__loader__',
68
+
69
+ '__name__',
70
+
71
+ '__package__',
72
+
73
+ '__path__',
74
+
75
+ '__spec__',
76
+
77
+ '__version__',
78
+
79
+ '_add_data_doc',
80
+
81
+ '_all_deprecated',
82
+
83
+ '_check_versions',
84
+
85
+ '_color_data',
86
+
87
+ '_create_tmp_config_or_cache_dir',
88
+
89
+ '_deprecated_ignore_map',
90
+
91
+ '_deprecated_map',
92
+
93
+ '_deprecated_remain_as_none',
94
+
95
+ '_ensure_handler',
96
+
97
+ '_error_details_fmt',
98
+
99
+ '_get_config_or_cache_dir',
100
+
101
+ '_get_data_path',
102
+
103
+ '_get_executable_info',
104
+
105
+ '_get_xdg_cache_dir',
106
+
107
+ '_get_xdg_config_dir',
108
+
109
+ '_init_tests',
110
+
111
+ '_label_from_arg',
112
+
113
+ '_log',
114
+
115
+ '_logged_cached',
116
+
117
+ '_open_file_or_url',
118
+
119
+ '_preprocess_data',
120
+
121
+ '_rc_params_in_file',
122
+
123
+ '_replacer',
124
+
125
+ '_version',
126
+
127
+ 'atexit',
128
+
129
+ 'cbook',
130
+
131
+ 'checkdep_dvipng',
132
+
133
+ 'checkdep_ghostscript',
134
+
135
+ 'checkdep_inkscape',
136
+
137
+ 'checkdep_pdftops',
138
+
139
+ 'checkdep_ps_distiller',
140
+
141
+ 'checkdep_usetex',
142
+
143
+ 'colors',
144
+
145
+ 'compare_versions',
146
+
147
+ 'contextlib',
148
+
149
+ 'cycler',
150
+
151
+ 'dedent',
152
+
153
+ 'defaultParams',
154
+
155
+ 'default_test_modules',
156
+
157
+ 'fontconfig_pattern',
158
+
159
+ 'ft2font',
160
+
161
+ 'functools',
162
+
163
+ 'get_backend',
164
+
165
+ 'get_cachedir',
166
+
167
+ 'get_configdir',
168
+
169
+ 'get_data_path',
170
+
171
+ 'get_home',
172
+
173
+ 'get_label',
174
+
175
+ 'get_py2exe_datafiles',
176
+
177
+ 'importlib',
178
+
179
+ 'inspect',
180
+
181
+ 'interactive',
182
+
183
+ 'is_interactive',
184
+
185
+ 'is_url',
186
+
187
+ 'locale',
188
+
189
+ 'logging',
190
+
191
+ 'matplotlib_fname',
192
+
193
+ 'mplDeprecation',
194
+
195
+ 'namedtuple',
196
+
197
+ 'numpy',
198
+
199
+ 'os',
200
+
201
+ 'pprint',
202
+
203
+ 'rc',
204
+
205
+ 'rcParams',
206
+
207
+ 'rcParamsDefault',
208
+
209
+ 'rcParamsOrig',
210
+
211
+ 'rc_context',
212
+
213
+ 'rc_file',
214
+
215
+ 'rc_file_defaults',
216
+
217
+ 'rc_params',
218
+
219
+ 'rc_params_from_file',
220
+
221
+ 'rcdefaults',
222
+
223
+ 'rcsetup',
224
+
225
+ 're',
226
+
227
+ 'sanitize_sequence',
228
+
229
+ 'set_loglevel',
230
+
231
+ 'shutil',
232
+
233
+ 'subprocess',
234
+
235
+ 'sys',
236
+
237
+ 'tempfile',
238
+
239
+ 'test',
240
+
241
+ 'tk_window_focus',
242
+
243
+ 'use',
244
+
245
+ 'validate_backend']
246
+
247
+ ```
248
+
249
+ とするとここに`pyplot`はありません。上に書いたように`matplotlib`は`pyplot`という名前の属性を持っていないからです。
250
+
251
+
252
+
253
+ しかし、importの作用として
254
+
255
+ [https://docs.python.org/ja/3/reference/import.html#submodules](https://docs.python.org/ja/3/reference/import.html#submodules)
256
+
257
+ > サブモジュールをロードするのにどのようなメカニズム (例えば、 importlib API 、 import または import-from ステートメント、またはビルトイン関数の __import__) が使われた場合でも、バインディングは**サブモジュールオブジェクトを親モジュールの名前空間に配置します**。
258
+
259
+
260
+
261
+ (強調は私)
262
+
263
+
264
+
265
+ とあります。ということは、`matplotlib.pyplot`をロードした時に`matplotlib`の属性として追加されることを意味します。
266
+
267
+
268
+
269
+ ```plain
270
+
271
+ >>> from matplotlib import pyplot
272
+
273
+
274
+
275
+ >>> pprint(dir(matplotlib))
276
+
277
+ ['LooseVersion',
278
+
279
+ 'MatplotlibDeprecationWarning',
280
+
281
+ 'MutableMapping',
282
+
283
+ 'Parameter',
284
+
285
+ 'Path',
286
+
287
+ 'RcParams',
288
+
289
+ 'URL_REGEX',
290
+
291
+ '_DATA_DOC_APPENDIX',
292
+
293
+ '_DATA_DOC_TITLE',
294
+
295
+ '_ExecInfo',
296
+
297
+ '__bibtex__',
298
+
299
+ '__builtins__',
300
+
301
+ '__cached__',
302
+
303
+ '__doc__',
304
+
305
+ '__file__',
306
+
307
+ '__loader__',
308
+
309
+ '__name__',
310
+
311
+ '__package__',
312
+
313
+ '__path__',
314
+
315
+ '__spec__',
316
+
317
+ '__version__',
318
+
319
+ '_add_data_doc',
320
+
321
+ '_all_deprecated',
322
+
323
+ '_check_versions',
324
+
325
+ '_cm',
326
+
327
+ '_cm_listed',
328
+
329
+ '_color_data',
330
+
331
+ '_constrained_layout',
332
+
333
+ '_create_tmp_config_or_cache_dir',
334
+
335
+ '_deprecated_ignore_map',
336
+
337
+ '_deprecated_map',
338
+
339
+ '_deprecated_remain_as_none',
340
+
341
+ '_ensure_handler',
342
+
343
+ '_error_details_fmt',
344
+
345
+ '_get_config_or_cache_dir',
346
+
347
+ '_get_data_path',
348
+
349
+ '_get_executable_info',
350
+
351
+ '_get_xdg_cache_dir',
352
+
353
+ '_get_xdg_config_dir',
354
+
355
+ '_image',
356
+
357
+ '_init_tests',
358
+
359
+ '_label_from_arg',
360
+
361
+ '_layoutbox',
362
+
363
+ '_log',
364
+
365
+ '_logged_cached',
366
+
367
+ '_mathtext_data',
368
+
369
+ '_open_file_or_url',
370
+
371
+ '_path',
372
+
373
+ '_preprocess_data',
374
+
375
+ '_pylab_helpers',
376
+
377
+ '_rc_params_in_file',
378
+
379
+ '_replacer',
380
+
381
+ '_version',
382
+
383
+ 'afm',
384
+
385
+ 'artist',
386
+
387
+ 'atexit',
388
+
389
+ 'axes',
390
+
391
+ 'axis',
392
+
393
+ 'backend_bases',
394
+
395
+ 'backend_tools',
396
+
397
+ 'backends',
398
+
399
+ 'bezier',
400
+
401
+ 'blocking_input',
402
+
403
+ 'category',
404
+
405
+ 'cbook',
406
+
407
+ 'checkdep_dvipng',
408
+
409
+ 'checkdep_ghostscript',
410
+
411
+ 'checkdep_inkscape',
412
+
413
+ 'checkdep_pdftops',
414
+
415
+ 'checkdep_ps_distiller',
416
+
417
+ 'checkdep_usetex',
418
+
419
+ 'cm',
420
+
421
+ 'collections',
422
+
423
+ 'colorbar',
424
+
425
+ 'colors',
426
+
427
+ 'compare_versions',
428
+
429
+ 'container',
430
+
431
+ 'contextlib',
432
+
433
+ 'contour',
434
+
435
+ 'cycler',
436
+
437
+ 'dates',
438
+
439
+ 'dedent',
440
+
441
+ 'defaultParams',
442
+
443
+ 'default_test_modules',
444
+
445
+ 'docstring',
446
+
447
+ 'dviread',
448
+
449
+ 'figure',
450
+
451
+ 'font_manager',
452
+
453
+ 'fontconfig_pattern',
454
+
455
+ 'ft2font',
456
+
457
+ 'functools',
458
+
459
+ 'get_backend',
460
+
461
+ 'get_cachedir',
462
+
463
+ 'get_configdir',
464
+
465
+ 'get_data_path',
466
+
467
+ 'get_home',
468
+
469
+ 'get_label',
470
+
471
+ 'get_py2exe_datafiles',
472
+
473
+ 'gridspec',
474
+
475
+ 'image',
476
+
477
+ 'importlib',
478
+
479
+ 'inspect',
480
+
481
+ 'interactive',
482
+
483
+ 'is_interactive',
484
+
485
+ 'is_url',
486
+
487
+ 'legend',
488
+
489
+ 'legend_handler',
490
+
491
+ 'lines',
492
+
493
+ 'locale',
494
+
495
+ 'logging',
496
+
497
+ 'markers',
498
+
499
+ 'mathtext',
500
+
501
+ 'matplotlib_fname',
502
+
503
+ 'mlab',
504
+
505
+ 'mplDeprecation',
506
+
507
+ 'namedtuple',
508
+
509
+ 'numpy',
510
+
511
+ 'offsetbox',
512
+
513
+ 'os',
514
+
515
+ 'patches',
516
+
517
+ 'path',
518
+
519
+ 'pprint',
520
+
521
+ 'projections',
522
+
523
+ 'pyplot',
524
+
525
+ 'quiver',
526
+
527
+ 'rc',
528
+
529
+ 'rcParams',
530
+
531
+ 'rcParamsDefault',
532
+
533
+ 'rcParamsOrig',
534
+
535
+ 'rc_context',
536
+
537
+ 'rc_file',
538
+
539
+ 'rc_file_defaults',
540
+
541
+ 'rc_params',
542
+
543
+ 'rc_params_from_file',
544
+
545
+ 'rcdefaults',
546
+
547
+ 'rcsetup',
548
+
549
+ 're',
550
+
551
+ 'sanitize_sequence',
552
+
553
+ 'scale',
554
+
555
+ 'set_loglevel',
556
+
557
+ 'shutil',
558
+
559
+ 'spines',
560
+
561
+ 'stackplot',
562
+
563
+ 'streamplot',
564
+
565
+ 'style',
566
+
567
+ 'subprocess',
568
+
569
+ 'sys',
570
+
571
+ 'table',
572
+
573
+ 'tempfile',
574
+
575
+ 'test',
576
+
577
+ 'texmanager',
578
+
579
+ 'text',
580
+
581
+ 'textpath',
582
+
583
+ 'ticker',
584
+
585
+ 'tight_bbox',
586
+
587
+ 'tight_layout',
588
+
589
+ 'tk_window_focus',
590
+
591
+ 'transforms',
592
+
593
+ 'tri',
594
+
595
+ 'units',
596
+
597
+ 'use',
598
+
599
+ 'validate_backend',
600
+
601
+ 'widgets']
602
+
603
+ ```
604
+
605
+ となり、確かに`pyplot`がここにあります。
606
+
607
+
608
+
609
+ したがって正しい回答は
610
+
611
+ モジュール`matplotlib`は`pyplot`という名前の属性を持っていない
612
+
613
+ けれども
614
+
615
+ モジュール`matplotlib.pyplot`を**ロードした時**に、「完全修飾名`matplotlib.pyplot`を持つモジュール」が、モジュール`matplotlib`に`pyplot`という属性で束縛される
616
+
617
+ ということになります。