我想使用math_operation 作為函式的入口引數,因此用戶可以輸入任何math_operation 來接收結果。認為這樣的事情可能適用于默認引數:
mathematical_operation = input()
def fun(a=1, b=1, c=1, mathematical_operation=a*(x**2) b*x c):
x = np.linspace(-1,1,10)
y = (lambda a,b,c: mathematical_operation)(a,b,c)
print(x)
print(y)
return y
fun(mathematical_operation = a*(x**2) b*x c)
但是它給出了錯誤:
Traceback (most recent call last):
File "C:\Users\Documents\Python\test.py", line 38, in <module>
def fun(a = 1, b = 1, c = 1, equation = a*(x**2) b*x c):
NameError: name 'a' is not defined
uj5u.com熱心網友回復:
如果您需要對數學運算式/問題進行更復雜的評估,您應該看看sympy,一個用于符號操作的 3-d 派對庫等等!它比字串評估更干凈和安全。
from sympy import symbols, lambdify
import numpy as np
def fun(a=1, b=1, c=1):
a0, b0, c0 = symbols('a0 b0 c0') # constant parameters
x = symbols('x') # variable
expr = a0 * (x**2) b0*x c0 # expression
expr = expr.subs(dict(a0=a, b0=b, c0=c)) # evaluation of the parameters
func = lambdify(x, expr, 'numpy') # function of x-only
domain = np.linspace(-1,1, 10)
y = func(domain)
print(domain)
print(y)
return y
fun()
輸出
[-1. -0.77777778 -0.55555556 -0.33333333 -0.11111111 0.11111111
0.33333333 0.55555556 0.77777778 1. ]
[1. 0.82716049 0.75308642 0.77777778 0.90123457 1.12345679
1.44444444 1.86419753 2.38271605 3. ]
備注:代碼看起來有點長(而且更丑!)只是因為我試圖尊重原始代碼的結構。
uj5u.com熱心網友回復:
Python 認為您正在嘗試將定義的變數傳遞給函式。你可以嘗試評估:
import numpy as np
def fun(a=1, b=1, c=1, equation=None):
x = np.linspace(-1,1,10)
y = (lambda a,b,c,x: eval(equation))(a,b,c,x)
print(x)
print(y)
return y
fun(equation = "a*(x**2) b*x c")
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/329433.html
