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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

594閲覧

global宣言を用いずに値を次のループに持ち越す方法

nasumax

総合スコア10

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/11/29 06:22

前提

関数による計算for文で回し、計算結果をループごとに足していくプログラムを作りたいのですが、計算結果の値を次のループに持ち越す方法が分かりません。※プログラムの高速化のためにNumbaを使用しているのですが、Numbaにはグローバル変数への代入が実装されていないようなのでglobal宣言は使えません。

実現したいこと

global宣言を使用せずに値を次のループに持ち越す

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

for i in range(m): t, x1, x2, y1, y2, Win, Qin,Wins, Qins,x10_m,y10_m,x20_m,y20_m = initial(dt, T1, x10_i, x20_i, y10_i, y20_i, k, gamma, σ) t1,x11,x21,y11,y21=t,x1,x2,y1,y2 t, x1, x2, y1, y2, Wm, Qm, Wms, Qms,x10_f0,y10_f0,x20_f0,y20_f0 = measurement(dt, T2, x10_m, x20_m, y10_m, y20_m, k, gamma, σ) t2,x12,x22,y12,y22=t,x1,x2,y1,y2 t, x1, x2, y1, y2, Wf, Qf, Wfs, Qfs,x10_d,y10_d,x20_d,y20_d = feedback(dt, T3, x10_f0, x20_f0, y10_f0, y20_f0, k, gamma, σ) t3,x13,x23,y13,y23=t,x1,x2,y1,y2 t, x1, x2, y1, y2, Wd, Qd, Wds, Qds,x10_d2,y10_d2,x20_d2,y20_d2 = diffusion(dt, T4, x10_d, x20_d, y10_d, y20_d, k, gamma, σ) t4,x14,x24,y14,y24=t,x1,x2,y1,y2 t, x1, x2, y1, y2, Wd2, Qd2, Wd2s, Qd2s,x10_i,y10_i,x20_i,y20_i = diffusion2(dt, T5, x10_d, x20_d, y10_d, y20_d, k, gamma, σ) t5,x15,x25,y15,y25=t,x1,x2,y1,y2 t=np.concatenate([t1,T1+t2,T1+T2+t3,T1+T2+T3+t4,T1+T2+T3+T4+t5]) x1=np.concatenate([x11,x12,x13,x14,x15]) x2=np.concatenate([x21,x22,x23,x24,x25]) y1=np.concatenate([y11,y12,y13,y14,y15]) y2=np.concatenate([y21,y22,y23,y24,y25]) arg = np.arctan2(y1, x1) arg[0]=arg0 arg = np.unwrap(arg) ax6.plot(t+Tc*(i+1), x2 *1E6, lw = 0.5) ax7.plot(t+Tc*(i+1), y2 *1E6, lw = 0.5) ax8.plot(t+Tc*(i+1), arg*180/np.pi, lw = 0.5) arg0 = arg[-1] U_i = potential_i(x20_m,y20_m) U_m0 = potential_m(0,x20_m,y20_m) W_md = U_m0-U_i+Wm U_is = potential_i(x10_m,y10_m) U_m0s = potential_m(0,x10_m,y10_m) W_ms = U_m0s-U_is+Wms U_d2i = potential_i(x20_i,y20_i) U_d2 = potential_d2(T5,x20_i,y20_i) W_md2 = U_d2i-U_d2+Wd2

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

jbpb0

2022/11/29 06:28

> 計算結果をループごとに足していく の足し算の結果を入れる変数をループの前で定義して「0」を代入しておいて、ループ内では計算した値をその変数に足し算したらいいと思うのですが
TakaiY

2022/11/29 06:30 編集

「計算結果の値を次のループに持ち越す」とありますが、現在のループのどこに問題があるのでしょう? 提示されているコードにglobal変数がかかわるような処理はみあたりません。 forループそのもののことを言っているのであれば、forループはスコープを作りませんので、global宣言は不要です。
nasumax

2022/11/29 06:49

関数内と勘違いしていました。すみませんでした。
guest

回答1

0

ベストアンサー

ふつうに、そのfor文の前で変数定義すればいいだけですな。

投稿2022/11/29 06:42

y_waiwai

総合スコア87774

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

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

nasumax

2022/11/29 06:49

単純な勘違いでした。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問