2

Python では、プログラムで文字列として指定されたコマンドを評価する方法を理解しようとしています。たとえば、組み込みの数学関数を考えてみましょsincostan

これらの関数がリストとして与えられたとします。

li = ['sin', 'cos', 'tan']

ここで、リスト内の各要素を反復処理し、各関数を数値引数に適用します。

x = 45
for func in li:
    func(x)

func は文字列であり、アイデアを示しているだけなので、上記は明らかに機能しません。Lisp では、各関数を引用符で囲んだ記号にして、上記と同様に評価することができます (もちろん Lisp 構文でも、考え方は同じです)。

これはPythonでどのように行われますか?

ありがとうございます。さらに情報が必要な場合はお知らせください。

4

4 に答える 4

8

関数自体を使用するだけです:

from math import sin, cos, tan
li = [sin, cos, tan]

本当に文字列を使用する必要がある場合は、dict を作成します。

funcs = {'sin': sin, 'cos': cos, 'tan': tan}
func = funcs[string]
func(x)
于 2013-08-14T20:26:21.617 に答える
5

ここにはいくつかのオプションがあります。以下にいくつかのより良いオプションをリストしました。

  • すべての関数が同じモジュールからのものである場合は、 を使用module.getattr(func)して関数にアクセスできます。この場合、sin、cos、および tan はすべて数学の関数であるため、次のようにすることができます。

    import math
    
    li = ['sin', 'cos', 'tan']
    x = 45
    for func in li:
        x = getattr(math, func)(x)
    
  • 名前を関数にマッピングする辞書を作成し、それをルックアップ テーブルとして使用します。

    import math
    
    table = {'sin': math.sin, 'cos': math.cos, 'tan': math.tan}
    li = ['sin', 'cos', 'tan']
    x = 45
    for func in li:
        x = table[func](x)
    
  • 関数をリストに直接入れます。

    import math
    
    li = [math.sin, math.cos, math.tan]
    x = 45
    for func in li:
        x = func(x)
    
于 2013-08-14T20:29:28.100 に答える
1

これらの文字列をユーザー入力などから取得していると仮定すると、入力を関数のリストに変更するだけでなく、これを行う方法がいくつかあります。math1 つの方法は、モジュール内の関数を検索することです。

import math

name = 'sin'
getattr(math, name) # Gives the sin function

または、名前を関数にマッピングする dict を作成できます。

funcs = {'sin': math.sin, 'cos': math.cos, 'tan': math.tan}

funcs['sin'] # Gives the sin function
于 2013-08-14T20:29:24.060 に答える
1

If these are functions of a module (the ones of the example are functions of math module) you can use getattr:

import math
li = ['sin', 'cos', 'tan']
x = 45
for func in li:
    f = getattr(math, func)
    f(x)

If you don't need to be strings you can make a list of functions:

import math
li = [sin, cos, tan]
x = 45
for func in li:
    func(x)
于 2013-08-14T20:34:58.593 に答える