2016-07-21 6 views
1
は、次のように

私はモジュールtest.pyを持って次のように別のモジュールでインポートはどのように正確に機能しますか?

def a(): 
    return "Hey!" 

def b(): 
    return a() 

を、私は機能bをインポート:今すぐ

from test import b 

、I第二のモジュールでprint b()、私のようにHey!を取得するとき出力。しかし、bという関数をインポートしたに過ぎず、aではなく、NameErrorを期待していました。

from x import yステートメントは、yのすべての従属関数と変数を自動的にxからインポートしますか?

+1

2つのステートメントの唯一の違いは、どの名前がバインドされているかです。 import testはモジュールにnameテストをバインドします(例test - > test.modules ['test'])。テストimport 'b'は別の名前bをバインドします。例b - > test.modules ['test']。b)。残りのテストモジュールはまだそこにあります。[このリンクをチェック](http://programmers.stackexchange.com/questions/187403/import-module-vs-from-module-import-function/187471)をチェックしてください。 – Vaibhav

答えて

0
from test import b 

これはtestからb以外の任意の関数をインポートしません。現在のモジュールで利用可能な機能はb()です。あなたは

import test

を使用している場合しかし、その後testからのすべての機能をあなたにアクセスできるようになります。これで、testの関数を現在のモジュールに呼び出すことができます。

最も良い方法は、現在のモジュール内でglobals()を使用することです。最初のケース(すなわちfrom test import b)のglobals()は、testの機能bを表示します。これは、ONLYbのメソッドtestにアクセスできることを意味します。

しかし、後者(import test)のglobals()は、機能bではなく、モジュールtestを表示します。したがって、あなたは全体のモジュールtestにアクセスすることができ、それはすべての方法です。

this blogが参考になる場合があります。

関連する問題