【Python】交互式界面创建函数
文章目錄
- 簡介
- 規(guī)則
- 思路
- 示例代碼與運(yùn)行效果
簡介
運(yùn)行Python時,在程序運(yùn)行過程中手動輸入一個函數(shù)表達(dá)式,并將其作為一個函數(shù)進(jìn)行后續(xù)的調(diào)用工作,類似于Matlab里面的匿名函數(shù)。這個功能使用傳統(tǒng)語言會相當(dāng)麻煩,當(dāng)然,我也只是利用了Python的某些功能進(jìn)行了一些技巧性的操作,大家會發(fā)現(xiàn),正式因?yàn)镻ython的這些有用的函數(shù),動態(tài)創(chuàng)建函數(shù)成為可能。
規(guī)則
創(chuàng)建函數(shù)時,乘號依舊是不能省略的,可以使用常規(guī)的表達(dá)式,例如"3*x^2"表示3x23x^23x2,“2^x”表示2x2^x2x,"e^x"表示exe^xex,"ln(x)"表示lnxlnxlnx。支持復(fù)數(shù)的四則運(yùn)算,但是若復(fù)數(shù)在指數(shù)上需要自己額外編寫函數(shù)以適應(yīng)計(jì)算。
當(dāng)動態(tài)創(chuàng)建函數(shù)完成時,在交互式界面要求能任意調(diào)用函數(shù)值,若測試成功,則可在剩下的程序中擴(kuò)展其他功能使用。調(diào)用形式類似于以下形式:
思路
我們需要實(shí)現(xiàn)的功能類似于在系統(tǒng)編程(ISP),但使用過于復(fù)雜的算法是不可取的,在此筆者提供一種非常簡單的方法。首先介紹一下eval()函數(shù),這是一個非常簡單的函數(shù),可以將輸入的一串表達(dá)式轉(zhuǎn)換為結(jié)果值(python3),例如(eval(“1+1”)=2),eval(“2**3”)=8。更有價值的一點(diǎn)是,如果import了math模塊,可以直接把math模塊的函數(shù)引入eval表達(dá)式,例如eval(“l(fā)og10(100)”=2)。既然我們可以將一個特殊的用戶自定義表達(dá)式計(jì)算出來,為什么我們不能將其作為一個函數(shù)呢?因此,格式化字符串與其結(jié)合就成了最好的選擇。例如:
>>> str = "2*%d" >>> eval(str % 2) 4 >>> eval(str % 10) 20這個思路有了之后,我們基本上就匯編寫我們的自定義函數(shù)程序了。
示例代碼與運(yùn)行效果
""" 手動設(shè)置函數(shù) 輸入一個數(shù)學(xué)函數(shù)并調(diào)用它的值 Examples [in0]:9*x+2*x^2 [in1]:f(1) [out1]:11 [in2]:f(2) [out2]:26 """ from math import * import matplotlib.pyplot as plt from pylab import * init_str = input("請輸入一個函數(shù),默認(rèn)變量為x:\n") # 將所有的x替換為格式化符號 str_fx = init_str.replace("^", "**")def f(x):fx = str_fx.replace("x", "%(x)f") # 所有的"x"換為"%(x)f"return eval(fx % {"x": x}) # 字典類型的格式化字符串,將所有的"x"替換為變量xdef draw(a, b, interp):x = [a+ele*interp for ele in range(0, int((b-a)/interp))]y = [f(ele) for ele in x]plt.figure(1)plt.plot(x, y)xlim(a, b)title(init_str, color="b")plt.show()運(yùn)行效果如下:
請輸入一個函數(shù),默認(rèn)變量為x: >? atan(x)+pi*x/2-sin(x)+0.02*2^x >>> for i in range(0,11):print(f(i))0.02 1.5547235053844484 3.4194439445582017 5.980314744723077 8.685805466155546 10.826306675582638 12.389841108348575 14.32748696103622 18.143453699983926 25.425187561533313 38.20311205314207 請輸入一個函數(shù),默認(rèn)變量為x: atan(x)-log(2*x+1)+3*x^2-4*x draw(0,1,0.01)顯示繪制的函數(shù)圖形如下:
可以看出本函數(shù)實(shí)現(xiàn)了用戶在運(yùn)行過程中創(chuàng)建函數(shù)的功能,繪圖和調(diào)用只是最基本的兩個功能,讀者可在本基礎(chǔ)上進(jìn)行擴(kuò)展。
轉(zhuǎn)載請注明出處。
總結(jié)
以上是生活随笔為你收集整理的【Python】交互式界面创建函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单的小工具wordlight——让VS
- 下一篇: Python联网下载文件