簡體   English   中英

創建一個將表達式作為python輸入的函數

[英]Create a function that accepts an expression as an input in python

我正忙於對等分方法做一些代碼。 當然,編寫腳本並運行它很容易。 但是,當我要定義一個將諸如x ** 2之類的表達式作為輸入的函數時,就會出現這種技巧。 我把東西湊在一起了。 它可以完成工作,但是在我的第一個if語句中,它抱怨無法將一個函數與一個函數相乘。 我也將如何解決這個問題? 我真的嘗試過在這個問題上做功課,然后才提出要求,很遺憾找不到解決方案。 我只是想知道如何做到這一點。

from sympy.abc import x

def bisect(f, a, b):
    f = lambda x: f
    f_a, f_b = f(a), f(b)
    tol = 1e-4 
    count = 0
    print '\t'.join( ['Step' , 'a', 'b', 'c', 'f(c) ' , '(b-a)/2)'])
    while (b-a)/float(2) > tol:
        c = (a+b)/2
        f_c = f(c)
        print '\t'.join( [str(count) , str(a) , str(b) , str(c), str((b-a)/float(2) )])
        if f_a*f_c < 0:
            b = c
            f_b = f_c
        else:
            a = c
            f_a = f_c
        count = count + 1

這是您需要知道的嗎?

>>> def demo(func):
...   for i in range(5):
...     print func( float(i))
... 
>>> demo( lambda x: x**2 + 2*x - 5 )
-5.0
-2.0
3.0
10.0
19.0

您還可以傳入由def創建的函數以及由lambda定義的單行代碼。 以上與

def foo(x):
    return x**2 + 2*x - 5 

demo( foo) 

您可能想知道的另一件事是

definition = "x**2 + 2*x - 5" # or read it from the user as text input
demo( eval( "lambda x: " + definition))

作品...

強制性警告 :“評估是邪惡的”,接受用戶的Python代碼並執行它通常被認為是安全性! 但是,如果此代碼是由正在嘗試繪制數學形式的同一用戶運行的,則不會造成太大危害。 他不能做任何比在命令行上使用python更糟糕的事情。 如果您要在網絡服務器或類似服務器上進行任何此類操作,我會擔心您的就業和未來前景!

假設您已經使用sympy為函數f創建了一個表達式:

f = x**2-0.1

如果更改lambda定義,則bisect函數將起作用:

def bisect(fexpr, a, b):
    f = lambda xval: fexpr.subs(x,xval)
    f_a, f_b = f(a), f(b)
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM