文章目录

  • 简介
  • 规则
  • 思路
  • 示例代码与运行效果

简介

运行Python时,在程序运行过程中手动输入一个函数表达式,并将其作为一个函数进行后续的调用工作,类似于Matlab里面的匿名函数。这个功能使用传统语言会相当麻烦,当然,我也只是利用了Python的某些功能进行了一些技巧性的操作,大家会发现,正式因为Python的这些有用的函数,动态创建函数成为可能。

规则

创建函数时,乘号依旧是不能省略的,可以使用常规的表达式,例如"3*x^2"表示3x23x^23x2,“2^x”表示2x2^x2x,"e^x"表示exe^xex,"ln(x)"表示lnxlnxlnx。支持复数的四则运算,但是若复数在指数上需要自己额外编写函数以适应计算。
当动态创建函数完成时,在交互式界面要求能任意调用函数值,若测试成功,则可在剩下的程序中扩展其他功能使用。调用形式类似于以下形式:

2**x-8*x+x^2-3
>>> f(9)
518.0
>>> f(0)
-2.0
>>> for i in range(0,11):print("f(%.3f)=%.3f"%(i,f(i)))f(0.000)=-2.000
f(1.000)=-8.000
f(2.000)=-11.000
f(3.000)=-10.000
f(4.000)=-3.000
f(5.000)=14.000
f(6.000)=49.000
f(7.000)=118.000
f(8.000)=253.000
f(9.000)=518.000
f(10.000)=1041.000

思路

我们需要实现的功能类似于在系统编程(ISP),但使用过于复杂的算法是不可取的,在此笔者提供一种非常简单的方法。首先介绍一下eval()函数,这是一个非常简单的函数,可以将输入的一串表达式转换为结果值(python3),例如(eval(“1+1”)=2),eval(“2**3”)=8。更有价值的一点是,如果import了math模块,可以直接把math模块的函数引入eval表达式,例如eval(“log10(100)”=2)。既然我们可以将一个特殊的用户自定义表达式计算出来,为什么我们不能将其作为一个函数呢?因此,格式化字符串与其结合就成了最好的选择。例如:

>>> str = "2*%d"
>>> eval(str % 2)
4
>>> eval(str % 10)
20

这个思路有了之后,我们基本上就汇编写我们的自定义函数程序了。

示例代码与运行效果

"""
手动设置函数
输入一个数学函数并调用它的值
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("请输入一个函数,默认变量为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()

运行效果如下:

请输入一个函数,默认变量为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
请输入一个函数,默认变量为x:
atan(x)-log(2*x+1)+3*x^2-4*x
draw(0,1,0.01)

显示绘制的函数图形如下:

可以看出本函数实现了用户在运行过程中创建函数的功能,绘图和调用只是最基本的两个功能,读者可在本基础上进行扩展。
转载请注明出处。

【Python】交互式界面创建函数相关推荐

  1. python前端界面实现交互,python的交互模式是什么

    如何进入python交互界面 Python交互模式有两种:图形化的交互模式或者命令行的交互模式.打开步骤:首先点击开始菜单. 然后在搜索栏中输入Python,即可看到图形化的交互模式(IDLE(Pyt ...

  2. python怎么用交互式界面_交互式python教程_如何用python做交互式界面

    什么叫做交互式python解释器 个例子来说明交互式解释  (看看 Onion - 老杨 解释的内容如下) 例: 创建文件 zoo.py.在该文件义函数 hours(),输出字符串'Open 9-5 ...

  3. python 交互式流程图_使用Python创建漂亮的交互式和弦图

    python 交互式流程图 Python中的数据可视化 (Data Visualization in Python) R vs Python is a constant tussle when it ...

  4. python交互式和文件式_使用Python创建和自动化交互式仪表盘

    python交互式和文件式 In this tutorial, I will be creating an automated, interactive dashboard of Texas COVI ...

  5. python中使用zip函数基于两个列表数据list创建字典dict数据(Create a dictionary by passing the output of zip to dict)

    python中使用zip函数基于两个列表数据list创建字典dict数据(Create a dictionary by passing the output of zip to dict) 目录

  6. python使用np.logspace函数在对数刻度上创建一个对数等距数组实战:在对数刻度上创建一个数组(指定数值个数以及是否包含末尾界值)、使用不同的基数(底数)在对数刻度上构建等距数组、可视化

    python使用np.logspace函数在对数刻度上创建一个对数等距数组实战:在对数刻度上创建一个数组(指定数值个数以及是否包含末尾界值).使用不同的基数(底数)在对数刻度上构建等距数组.可视化 目 ...

  7. python如何创建函数对列表里的元素进行分类_列表(List)操作方法详解

    列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型.列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类 ...

  8. python怎么创建函数_Python创建与调用函数

    今天我们来讲Python里的创建与调用函数. 先讲创建函数,创建函数使用def关键字,就是define的缩写. 上代码看看吧: def say(info): print(info) 这就是一个名叫sa ...

  9. python使用复合语句def创建函数对象_Python 纯函数

    Python 纯函数,函数式编程简洁明了,因为函数可以用作其他函数的参数或者返回值,后续会给出很多这样的例子. 要做到这一点,函数必须是运行时环境中的头等对象.在C等语言中,函数不是运行时中的对象,然 ...

最新文章

  1. 智能的源泉,大脑从何而来?
  2. 3d卷积神经网络_HSNets:使用卷积神经网络从2D轮廓预测3D人体模型
  3. tensorflow keras 对应版本
  4. selenium webdrive 默认打开浏览器设置
  5. 前端开发环境(2017)
  6. 实用教程 活动目录介绍及安装指南
  7. java复制文件夹_java实现拷贝一个文件夹,里面存在目录和文件,使用文件创建和文件流...
  8. GDI+中的图片处理类Image或Bitmap
  9. php 百度地图根据经纬度获取地址,使用百度地图api根据经纬度获取位置
  10. vue 中引入使用其他字体
  11. 远程办公软件华为云WeLink高效视频会议指南(下篇:视频会议怎么记录会议纪要?)
  12. 微信附近的人小程序怎么开(开通附近小程序的方法)
  13. [单片机框架][bsp层][AT32F415][bsp_gpio] GPIO配置和使用
  14. html5多媒体事件写法,多媒体元素重要事件 -HTML5
  15. mysql 免费么,mysql收费吗
  16. No7.线程常用操作方法
  17. 攻防世界we区newer题目
  18. PC机之间串口通信传输文件
  19. ps打不开图片显示计算机丢失,电脑的ps软件打不开图片怎么解决
  20. Android 发展史:“吃货”就是这么练成的

热门文章

  1. update和delete操作忘加where条件导致全表更新的处理方法
  2. Simple Addition expression【打表+二分】
  3. java sleep和wait区别
  4. Citrix Netscaler版本管理和选择
  5. 读书笔记《集体智慧编程》Chapter 2 : Make Recommendations
  6. Spring实战——通过Java代码装配bean
  7. HTML5——section,article,aside
  8. [人生百态]爱的样子
  9. [转]C++中sizeof(struct)怎么计算?
  10. python3的pyqt5 qtablewidget按数据大小排列_InnoDB为什么要选择B+树来存储数据?