![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_08.png?8acaa2e)
グローバル変数(配列)の値を変えたいと思います。
-------------
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- Ruby 教えてください 2 2023/01/04 17:50
- Ruby パイソンでテキストファイルが読み込めない 1 2022/11/14 16:42
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- ビデオカード・サウンドカード 通常でLINE OUT端子から音を出したい 4 2022/08/04 22:07
- その他(プログラミング・Web制作) listへのappendが出来ない件 1 2022/12/06 21:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
相手側の携帯が電源切れてる時...
-
1コールだけ鳴るけど切れる電話...
-
face book で女性の方からline ...
-
遠くにいる友達とLINE交換する...
-
Windowsのバッチファイルで正規...
-
ラインナップとラインアップは...
-
いきなりラインのトークに「新...
-
生産ラインの品質を表す直行率...
-
INIファイルからのデータ読込み...
-
法線(normal line)はなぜそう...
-
既婚女性にラインを聞くことに...
-
LINEで好きな人が「笑」を全然つ...
-
毎月記念日をlineで祝うのって...
-
先輩のライン(男性)を追加した...
-
python flask から fastapiへの...
-
よく05(04)lineって見かけるん...
-
swift言語のprintln()関数で「p...
-
「一点鎖線」を英語でいうと?
-
phpとpostgreの接続にエラー解...
-
まだそんなに親しくない相手と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
相手側の携帯が電源切れてる時...
-
1コールだけ鳴るけど切れる電話...
-
face book で女性の方からline ...
-
よく05(04)lineって見かけるん...
-
いきなりラインのトークに「新...
-
Windowsのバッチファイルで正規...
-
遠くにいる友達とLINE交換する...
-
ラインナップとラインアップは...
-
生産ラインの品質を表す直行率...
-
LINEで好きな人が「笑」を全然つ...
-
ある男子から、ライン追加され...
-
「一番上、真ん中、下」を示す英語
-
法線(normal line)はなぜそう...
-
私がlineのアイコンを変更する...
-
LINE追加で「該当するユーザー...
-
質問です。 先日クラスの女子に...
-
lineのワン切り、なぜ?
-
line でおはようございます、の...
-
先輩のライン(男性)を追加した...
-
妊娠したらどうする?聞くのは...
おすすめ情報