Python中文
首页
教程
问答
标签
搜索
登录
注册
ex的替代品
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我目前正在尝试用tkinter编写一个Python(3.4.4)GUI,它应该允许将任意函数适合某些数据点。为了简单起见,我想创建一些输入函数并对其求值。稍后,我想用<code>curve_fit</code>从<code>scipy</code>绘制并调整它。在</p> <p>为此,我想从用户输入字符串创建一个动态(fitting)函数。我发现并阅读了<code>exec</code>,但人们说(1)使用它不安全,(2)总有更好的替代品(例如<a href="https://stackoverflow.com/questions/33409207/how-to-return-value-from-exec-in-functionand">here</a>和许多其他地方)。所以,我想知道在这种情况下有什么选择?在</p> <p>下面是一些包含两个嵌套函数的示例代码,它们可以工作,但不是动态的:</p> <pre><code>def buttonfit_press(): def f(x): return x+1 return f print(buttonfit_press()(4)) </code></pre> <p>在我开始使用xval之前,这里有一些代码会产生<code>NameError: name 'f' is not defined</code>:</p> ^{pr2}$ <p>这里讨论的另一种方法<code>types.FunctionType</code>(<a href="https://stackoverflow.com/questions/10303248/true-dynamic-and-anonymous-functions-possible-in-python">10303248</a>)也没有成功。。。在</p> <p>所以,我的问题是:对于这个场景,有没有一个好的替代方案?或者,如果没有,我如何使<code>exec</code>的代码运行?在</p> <p>我希望这是可以理解的,不要太含糊。提前感谢您的想法和意见。在</p> <hr/> <p>@Gábor Erdős:</p> <p>要么我不明白,要么我不同意。如果我在主循环中编写同一段代码,它将识别<code>f</code>,并且我可以从<code>execstr</code>执行代码段:</p> <pre><code>actfitfunc = "f(x)=x+1" execstr = "def {}:\n return {}\n".format(actfitfunc.split("=")[0], actfitfunc.split("=")[1]) exec(execstr) print(f(4)) >>> 5 </code></pre> <hr/> <p>@ukasz-Rogalski:</p> <p>打印<code>execstr</code>对我来说似乎不错:</p> <pre><code>def f(x): return x+1 </code></pre> <p>缩进错误不大可能是由于我的编辑,但我仔细检查了一下-没问题。 引入<code>my_locals</code>,在<code>exec</code>中调用它并随后打印显示:</p> <pre><code>{'f': <function f at 0x000000000348D8C8>} </code></pre> <p>但是,我仍然得到<code>NameError: name 'f' is not defined</code>。在</p> <hr/> <p>@user3691475:</p> <p>你的例子和我的第一个例子很相似。但在我的理解中,这不是“动态的”,也就是说,当代码运行时,不能改变函数的输出。在</p> <hr/> <p>@沙丘:</p> <p>我认为这是正确的方向,谢谢。但是,我还不明白下一步如何计算和使用这个函数?我的意思是:为了能够拟合它,我必须提取拟合变量(即<code>a</code>在<code>f(x)=a*x+b</code>)或在不同的x值下计算函数(即<code>print(f(3.14))</code>)。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>我不知道你到底想做什么,也就是说,允许什么功能,允许什么操作,等等</p> <p>以下是具有一个动态参数的函数生成器的示例:</p> <pre><code>>>> def generator(n): def f(x): return x+n return f >>> plus_one=generator(1) >>> print(plus_one(4)) 5 </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何添加虚拟方法
9 回答
如何添加表示整数的擦边字符串?
2 回答
如何添加要在Bokeh中使用的新font.ttf文件?
5 回答
如何添加要显示的矩阵XY轴编号和XY轴
5 回答
如何添加计数?
4 回答
如何添加计数器函数?
8 回答
如何添加计数器列来计算数据帧中另一列中的特定值?
3 回答
如何添加计数器来跟踪while循环中的月份和年份?
8 回答
如何添加计数并删除countplot的顶部和右侧脊椎?
8 回答
如何添加计时器wx.应用程序更新窗口对象的主循环?
1 回答
如何添加评论到帖子?PostDetailVew,Django 2.1.5
8 回答
如何添加评论拉梅尔亚姆
3 回答
如何添加诸如矩阵Python/Pandas之类的数据帧?
9 回答
如何添加谷歌地点自动完成到Flask?
9 回答
如何添加超时、python discord bot
2 回答
如何添加超过1dp的检查
5 回答
如何添加距离方法
1 回答
如何添加跟随游戏的敌人精灵
5 回答
如何添加路径以便python可以找到程序?
6 回答
如何添加身份验证/安全性以使用happybase访问HBase?
8 回答