-1

3 つの未知の変数 (k、m、c) の関数を定義しようとしていますが、毎回異なる周波数 f のために 100 回定義する必要があるとしましょう。Python の for ループでこれを実行し、すべての関数をリストに格納して、後で呼び出し可能にすることはできますか?

これは私がこれまでに持っているものです

index = -1
f_t = []
for f in inputs[:,0]:
   index = index +1
   def F_analytic(k, m, c):
      F_t = k*m*c*f 
      return F_t
   f_t.append([])
   f_t[index].append(F_analytic)

しかし、私が順番に取得するのは、呼び出し可能ではない関数のリストです:

Out[58]: 
[[<function __main__.F_analytic>],
[<function __main__.F_analytic>],
[<function __main__.F_analytic>],
[<function __main__.F_analytic>],
[<function __main__.F_analytic>],
...
... 
[<function __main__.F_analytic>],
[<function __main__.F_analytic>],
[<function __main__.F_analytic>]]

エラーは次のとおりです。

TypeError: 'list' object is not callable

何か助けはありますか?ありがとうございました!

4

5 に答える 5

1

いいえ、あなたが持っているのは関数のリストのリストで、各内部リストには1つの関数があります。

交換

f_t.append([])
f_t[index].append(F_analytic)

f_t.append(F_analytic)

(正直なところ、このアプローチ全体はかなり怪しいように思えます。100 個の 3 つのパラメーターではなく、4 つのパラメーターを持つ 1 つの関数が必要ない理由は何ですか?)

于 2013-09-20T11:23:00.190 に答える
0

これは、リストのリストを作成しているためです。次のように各関数オブジェクトを呼び出すことができます。

f_t[0][0](1,2,3)

または、関数のリストを作成するだけです:

f_t = []

for f in inputs[:,0]:
    index = index +1
    def F_analytic(k, m, c):
        F_t = k*m*c*f 
        return F_t
    f_t.append(F_analytic)

そして、他の回答やコメントで指摘されているように、これはすべてかなり奇妙なアプローチのようです。本当にこれを行う必要がありますか? :)

于 2013-09-20T11:22:39.700 に答える
-1

このコードを整理しましょう:

#instead of an index counter, python provide `enumerate`
# so that you can have the counter as part of your loop
#index = -1
f_t = []
for index, f in enumerate(inputs[:,0]):
#   index = index +1
   def F_analytic(k, m, c):
      #these two lines are redundant. You're just returning an expression
      # so this whole function can be a lambda
      F_t = k*m*c*f 
      return F_t
   #why are you creating an inner list for each index position,
   # and then appending the function to it?
   #even if you wanted to have the inner list, you could do it in one step
   f_t.append([])
   f_t[index].append(F_analytic)

指定された変更を行うと、次のようになります。

f_t = [(lambda k, m, c: k*m*c*f) for f in inputs[:,0]]

もちろん、はるかに単純なアプローチは、 を含む製品への入力を計算し、f直接乗算することです。

于 2013-09-20T13:20:18.503 に答える