私はサブ関数を持つ関数を持っており、サブ関数内の変数を初期化したいと思います。単純に、関数内の変数(サブ関数)を変数ファイル名のファイルから設定する
file = "foo"
def outerFunction():
def innerFunction():
var1 = 0
var2 = 1
var3 = 2
print file, var1, var2, var3
file = "bar"
innerFunction()
outerFunction()
出力:bar 0 1 2
はしかし、私は、複数の異なるファイル内の変数のかなりの数が多いと私は単にサブ関数が呼び出されるサブ関数にインポートしたいと思います。私は、次の内容のファイルbar.py
あるとします。
var1=0
var2=1
var3=2
をその後、私はときのPython 2.7がそれを好きではないので、これはエラーになるために起こっている
file = "foo"
def outerFunction():
def innerFunction():
from file import *
print file, var1, var2, var3
file = "bar"
innerFunction()
outerFunction()
ことに私のコードを変更しますサブ関数内にimport
を使用してください。だから、代わりに、我々は直接__import__
機能を使用することができます。
file = "foo"
def outerFunction():
def innerFunction():
__import__(file)
print file, var1, var2, var3
file = "bar"
innerFunction()
outerFunction()
ここインポート方法は動作しますが、変数は、これまで実際に私は、印刷に行くときにエラーが生じ、サブファンクションの変数リストにそれをしないでくださいそれらを出す。今、私はコードを変更できることを知っています
file = "foo"
def outerFunction():
def innerFunction():
f = __import__(file)
print file, f.var1, f.var2, f.var3
file = "bar"
innerFunction()
outerFunction()
そしてpeachyが動作します。しかし、それは私が探している解決策ではありません。私は、残りのコードを変更せずにそれらの関数をインポートできるようにしたい。この問題の解決策はありますか?
なぜファイルやオブジェクトを作成してインスタンス化できないのですか?次に、単にfile.property(file.var1)を実行するか、計算を実行したい場合はgetter関数を使用することもできます。 – kyle
あなたはPythonのインポートシステムについていくらか混乱しているようです。 「Python 2.7では、サブ関数内でインポートを使用すると、Python 2.7が好きではありません。いいえ...Pythonでは、どのバージョンでもスコープに関係なくimportステートメントで変数を使用することはできません。 "ここでのインポート方法は機能しますが、変数はローカルスコープに追加されません。"まあ、いいえ、それはどのような状況でも 'import x'がどのように動作するかではありません。私はあなたの第3のポイントを本当に理解していません。 –
また、それらが単なる設定であれば、それらを "実行"する代わりに解析する必要があります。たとえば、[configparser](https://docs.python.org/3/library/configparser.html)を使用すると、 – spectras