回答編集履歴

2

追記

2022/08/26 19:17

投稿

quickquip
quickquip

スコア11042

test CHANGED
@@ -51,3 +51,26 @@
51
51
  ![式](https://ddjkaamml8q8x.cloudfront.net/questions/2022-08-27/b9da8d2b-485c-4bbe-a39e-851d3b482659.png)
52
52
 
53
53
  なので、新しいuはこんな形なのでは? と思った実装に変えています。勘違いだったらすみません。
54
+
55
+ ----
56
+
57
+ そして、式の後ろ (1 - \int (略) ds) の部分は"新しい関数"の変数tを含んでいないので、要は定数項です。
58
+ "新しい関数"の呼び出し時に計算する理由はありません。
59
+
60
+ ```
61
+ from scipy import integrate
62
+
63
+ #初期値
64
+ def u(t):
65
+ ans = 2*t
66
+ return ans
67
+
68
+ j=0
69
+ j=j+1
70
+ def u(t, previous=u, constant=(1 - integrate.quad(lambda x: abs(u(x))**2, 0, 1)[0])):
71
+ ans = previous(t) * constant
72
+ return ans
73
+
74
+ print(u(0.1))
75
+ ```
76
+ でもいいと思います。

1

追記

2022/08/26 18:22

投稿

quickquip
quickquip

スコア11042

test CHANGED
@@ -11,6 +11,8 @@
11
11
 
12
12
  [プログラミング FAQ なぜオブジェクト間でデフォルト値が共有されるのですか?](https://docs.python.org/ja/3/faq/programming.html#why-are-default-values-shared-between-objects)
13
13
  > 関数の呼び出しによって、デフォルトの値に対する新しいオブジェクトが作られるのだと予想しがちです。実はそうなりません。デフォルト値は、関数が定義されたときに一度だけ生成されます。
14
+
15
+ (個人的には、「一度だけ生成されます」じゃなくて「一度だけ評価されます」と書いてあって欲しいと思いますが、一応原文ママで引用しました)
14
16
 
15
17
  ----
16
18