質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

983閲覧

Pythonで引数として渡したListを関数内のローカル変数に置き換える方法

ai2playgame

総合スコア15

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/04/07 03:36

pythonで引数で渡したListを関数内のローカル変数に置き換える方法を知りたいです。

python

1def func(argList): 2 print("==========") 3 print("argList in func(): {}".format(argList)) 4 output = [i * 2 for i in range(10)] 5 argList = output 6 print("argList in func(): {}".format(argList)) 7 print("==========") 8 9 10def func2(argList): 11 print("==========") 12 print("argList in func2(): {}".format(argList)) 13 output = [i * 2 for i in range(10)] 14 for i in range(len(output)): 15 argList[i] = output[i] 16 print("argList in func2(): {}".format(argList)) 17 print("==========") 18 19 20if __name__ == "__main__": 21 mainList = [i for i in range(10)] 22 print("mainList in main(): {}".format(mainList)) 23 func(mainList) 24 print("mainList in main(): {}".format(mainList)) 25 func2(mainList) 26 print("mainList in main(): {}".format(mainList)) 27

output

1mainList in main(): [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2========== 3argList in func(): [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 4argList in func(): [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 5========== 6mainList in main(): [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 7========== 8argList in func2(): [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 9argList in func2(): [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 10========== 11mainList in main(): [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

func()のように代入演算子を使って書き換えようとすると、呼び出し元で元に戻ってしまいます。(copy.copy()を使っても同様)
func2()のように、Listの値を1つずつ書き換えればやりたいことが出来ないこともないのですが、この実装ではもし引数のListと置き換えたいListの長さが違えば実行できません。

なにかよい実装はありませんか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

引数を書き換えようとせずに、返り値で渡せばいいです。

Python

1def func(argList): 2 print("==========") 3 print("argList in func(): {}".format(argList)) 4 return [i * 2 for i in range(10)] 5 6if __name__ == "__main__": 7 mainList = [i for i in range(10)] 8 print("mainList in main(): {}".format(mainList)) 9 mainList = func(mainList) 10 print("mainList in main(): {}".format(mainList))

投稿2020/04/07 03:50

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

python

1argList[:] = output

s[i:j] = t

s の i から j 番目までのスライスをイテラブル t の内容に入れ替えます
ミュータブルなシーケンス型 | 組み込み型 — Python 3.8.2 ドキュメント

投稿2020/04/07 11:37

hayataka2049

総合スコア30935

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問