

グローバル変数(配列)の値を変えたいと思います。
-------------
line = []
def tmp_read(self, *out_line):
f = open('tmp.txt')
lines2 = f.readlines() # 1行毎にファイル終端まで全て読む(改行文字も含まれる)
f.close()
# lines2: リスト。要素は1行の文字列データ
for line in lines2:
print line,
print
*out_line = lines2
return *out_line
tmp_read(self, *line)
print line ← 配列Lineの内容を確認する
-------------
この「line」には、文字列を含む配列を入れる予定です。
lines2で得られた値を、戻せば出来そうな気もしますが巧くいきません。
どのように修正すれば酔いか、教えて頂けませんか。
No.1ベストアンサー
- 回答日時:
まず最初に、変数に「*」のシンボルは使えないはずですが。
SyntaxErrorが出ませんか?Pythonでは自動的に、配列やクラスの受け渡しはすべてポインターで行われます。これはすごく重要なポイントです。
temp_read関数内に入った時、out_lineというポインターは「line」の配列を差しています。
そして「out_line = line2」の部分で、out_lineというポインターに、「line2」の配列を差すよう上書きしています。
ここで変化しているのは、out_lineというポインター変数だけです。元のline配列には何の変化もおきていないのです。
この問題を解決する為には、out_lineがもともと差している配列(=line)の中に、line2の中身を1つずつコピーする必要があります。具体的には、このようにします。
for line in lines2:
out_line.append(line)
この辺の違いは、C言語でのポインターの取り扱いに慣れていないと、なかなか理解するのは大変だと思います。
正しい関数は、こうなります。
↓
def tmp_read(self, out_line):
f = open('tmp.txt')
lines2 = f.readlines()
f.close()
for line in lines2:
out_line.append(line)
print line
return
No.3
- 回答日時:
配列(リスト)を戻したいというなら
def tmp_read():
f = open('tmp.txt')
lines2 = f.readlines()
f.close()
for line in lines2:
print line
return line2
line = tmp_read()
print line
でしょう。
# インデントを見せるため全角空白を使っています
リストは自由に作れますし関数から返せますから、C言語的にバッファを渡して書き換える必要はありません。
有難う御座います。
どうも、C言語に慣れきってしまっている所為か、pythonの流儀にはまだ慣れておりません。
勉強になりました。 m(_ _)m
No.2
- 回答日時:
tmp_read からリスト(配列)を返せばいいだけと思いますが、
関数の中で書き換えをしたいということならこういう手もあります。
line = []
def tmp_read(out_line):
____f = open('tmp.txt')
____out_line[:] = f.readlines()
____f.close()
print line
tmp_read(line)
print line
実行するとこんな感じ。
python moge.py
[]
['aaa\n', 'bbb\n', 'cccc\n', 'dddd\n', 'eee\n', 'fff\n']
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
相手側の携帯が電源切れてる時...
-
1コールだけ鳴るけど切れる電話...
-
ラインナップとラインアップは...
-
風俗に行ったとして、そこで嬢...
-
よく05(04)lineって見かけるん...
-
face book で女性の方からline ...
-
生産ラインの品質を表す直行率...
-
ある男子から、ライン追加され...
-
いきなりラインのトークに「新...
-
私がlineのアイコンを変更する...
-
毎月記念日をlineで祝うのって...
-
歯科衛生士の方へ、連絡先を渡...
-
並立と並列の違いってなんですか?
-
まだそんなに親しくない相手と...
-
LINEで好きな人が「笑」を全然つ...
-
既婚女性にラインを聞くことに...
-
LaTeXでÅ
-
「一番上、真ん中、下」を示す英語
-
会社の先輩とLINE プライベート...
-
ラインの友達登録の仕方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
1コールだけ鳴るけど切れる電話...
-
相手側の携帯が電源切れてる時...
-
face book で女性の方からline ...
-
風俗に行ったとして、そこで嬢...
-
よく05(04)lineって見かけるん...
-
生産ラインの品質を表す直行率...
-
ラインナップとラインアップは...
-
Windowsのバッチファイルで正規...
-
毎月記念日をlineで祝うのって...
-
いきなりラインのトークに「新...
-
「一番上、真ん中、下」を示す英語
-
遠くにいる友達とLINE交換する...
-
法線(normal line)はなぜそう...
-
ある男子から、ライン追加され...
-
line でおはようございます、の...
-
python flask から fastapiへの...
-
まだそんなに親しくない相手と...
-
LINEで好きな人が「笑」を全然つ...
-
歯科衛生士の方へ、連絡先を渡...
-
2000年生まれなのですが 00line...
おすすめ情報