基本的な質問が1つあります。xml関数でxmlfileをグローバルとして宣言していますが、問題なく別のサブルーチンで使用できますか?サブルーチンの順序は重要ですか?
def xml():
global xmlfile
file = open('config\\' + productLine + '.xml','r')
xmlfile=file.read()
def table():
parsexml(xmlfile)
基本的な質問が1つあります。xml関数でxmlfileをグローバルとして宣言していますが、問題なく別のサブルーチンで使用できますか?サブルーチンの順序は重要ですか?
def xml():
global xmlfile
file = open('config\\' + productLine + '.xml','r')
xmlfile=file.read()
def table():
parsexml(xmlfile)
関数が書かれる順序は重要ではありません。の値はxmlfile、関数が呼び出される順序によって決まります。
ただし、一般に、関数内のグローバルに値を再割り当てすることは避けたほうがよいでしょう。これにより、関数の動作の分析がより複雑になります。関数の引数や戻り値を使用することをお勧めします(または、クラスを使用して変数をクラス属性にすることもできます)。
def xml():
with open('config\\' + productLine + '.xml','r') as f:
return f.read()
def table():
xmlfile = xml()
parsexml(xmlfile)
まず第一に、私はグローバル変数を避けることについての他のコメントに完全に同意します。それらを回避するために再設計することから始める必要があります。しかし、あなたの質問に答えるために:
サブルーチンの定義の順序は重要ではありません。それらを呼び出す順序は重要です。
>>> def using_func():
... print a
...
>>> using_func()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in using_func
NameError: global name 'a' is not defined
>>> def defining_func():
... global a
... a = 1
...
>>> using_func()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in using_func
NameError: global name 'a' is not defined
>>> defining_func()
>>> using_func()
1