1

だから私は関数リストについて尋ねました、そして今私は私ができるかどうかを見たいと思います、私は文字列を非文字列にするのだろうか?言い方がよくわかりません。アイデアは、実行する必要のあるテストを含む文字列を関数に渡すことです。したがって、コードは次のようになります。

def newFunct(result, test):
    return (lambda x: result if(test) else "")

私が試したとき、それは文字列として受け取られ、常にtrueを返しました。

それをキャストする方法などはありますか?電話したときにnewFunct("Even", "x%2==0")戻るlambda x: "Even" if(x%2==0) else ""のではなく戻ってきlambda x: "Even" if("x%2==0") else ""ますか?

4

1 に答える 1

2

これは、次の関数を使用して実行できますeval

def newFunct(str, test):
    return (lambda x: str if eval(test, {"x": x}) else "")
is_even = newFunct("even", "x % 2 == 0")
is_even(4)
# "even"
is_even(10)
# "even"
is_even(13)
# ""

特にユーザーが入力した文字列を使用している場合は、使用evalが危険になる可能性があることに注意してください。関数を引数として取る方がよいでしょう。test

def newFunct(str, test):
    return (lambda x: str if test(x) else "")
is_even = newFunct("even", lambda x: x % 2 == 0)
于 2013-03-04T21:00:11.700 に答える