def test(): print("I am in test.py") bar.test() foo.test() def pp(): print("pp") pp()
# Импортировать модуль math, но не включать его содержимое в текущее пространство имён # Модуль при этом выполнит всю свою инициализацию (и упадёт, если с ней что-то пойдёт не так) import math # Дальше можно обращаться к содержимому модуля, явно указывая его имя print(math.cos(1)) # Импортировать из модуля math конкретную функцию (и включить её в пространство имён) from math import cos # Теперь имя модуля при вызове можно уже не писать print(cos(1)) # Импортировать всё содержимое модуля (и включить его в пространство имён) from math import * # Теперь можно вызывать всё, что в нём есть, не указывая имя модуля print(sin(1)) # Аналогично можно обращаться со своим кодом из файликов import bar bar.test() # Строчки ниже упадут. # Потому что в момент import foo модуль foo попробует выполнить импорт некоей grawagra, которой нет. # Важно заметить, что упадёт оно сразу в момент import foo, до попыток его использовать. # Это позитивный момент - модуль в момент импорта должен упасть сразу, а не маскировать будущую проблему. #import foo #foo.test()
import bar print "in foo/__init__.py" print dir(bar) print bar.test()
# 利用するときは import 文を使う。上のファイルがカレントディレクトリにあるなら、 import foo, bar # foo, bar をインポート。 # このときモジュール内のプログラムを実行。つまり a に数字を代入して関数 test() を定義する。 a = 1000 # a に 1000 代入 def test(): print 'test' # 関数 test() を定義。 a = 1000 もこれもメインモジュールに登録される # メインモジュール内の変数や関数は変数名や関数名だけでアクセスできるので、 a なら 1000, test() なら test a # 1000 # 他のモジュールに定義された変数関数にアクセスするには、名前の前にモジュール名とドットをつける # foo.a ならモジュール foo の変数 a にアクセスするので foo.a # 値は10 bar.a # 同じく100 test() # メインモジュールの関数 test() にアクセス test foo.test() # モジュール foo の test() にアクセス module foo bar.test() # モジュール bar の test() にアクセス module bar # --- from 文 --- # from {モジュール名} import {名前}, ... # 名前の衝突がない場合はこれを使うとモジュール名を付けなくていいのでラク from foo import a, test a # 10 test() # module foo # メインモジュールに a も test() もないので foo. をつけなくていい # import * にするとモジュール内のすべての名前を使える! ただし _ で始まる名前は除く from bar import * a # 100 test() # module bar # 同じ名前の関数を再定義してもエラーにはならない from foo import *
def test(): print("I am in foo.py - going to call bar.test") bar.test()
def test(): return bar.test()