Python中文
首页
教程
问答
标签
搜索
登录
注册
在Python-dictionary中选择不同的开关大小写替换,或者选择elif-else?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我最近读了一些问题,建议不要在支持switch case语句的语言中使用switch case语句。就Python而言,我已经看到了许多交换机案例的替换,例如:</p> <ol> <li>使用字典(许多变体)</li> <li>使用元组</li> <li>使用函数装饰符(<a href="http://code.activestate.com/recipes/440499/" rel="noreferrer">http://code.activestate.com/recipes/440499/</a>)</li> <li>使用多态性(推荐的方法而不是类型检查对象)</li> <li>使用if elif else梯子</li> <li>有人甚至推荐了访问者模式(可能是外部的)</li> </ol> <p>考虑到各种各样的选项,我在决定如何处理一段特定的代码时遇到了一些困难。我想学习选择其中一种方法的标准。此外,我希望能得到一些建议,在我难以决定的具体情况下(对选择的解释)该怎么做。</p> <p>具体问题如下:<br/> (一)</p> <pre><code>def _setCurrentCurve(self, curve): if curve == "sine": self.currentCurve = SineCurve(startAngle = 0, endAngle = 14, lineColor = (0.0, 0.0, 0.0), expansionFactor = 1, centerPos = (0.0, 0.0)) elif curve == "quadratic": self.currentCurve = QuadraticCurve(lineColor = (0.0, 0.0, 0.0)) </code></pre> <p>此方法由qt时隙调用,以响应从菜单中选择绘制曲线。一旦应用完成,上述方法将包含总共4-7条曲线。在这种情况下使用一本扔掉的字典是合理的吗?既然最明显的方法是如果艾利夫不这样做,我应该坚持吗?我也考虑在这里使用**卡丁车(在朋友的帮助下),因为所有的曲线类都使用**卡丁车。。。</p> <p>(2)<br/> 第二段代码是当用户更改曲线的属性时调用的qt槽。基本上,slot从gui(spinBox)获取数据,并将其放入适当的curve类的实例变量中。在这种情况下,我又有一个同样的问题-我应该用口述吗?</p> <p>这是前面提到的插槽-</p> <pre><code>def propertyChanged(self, name, value): """A Qt slot, to react to changes of SineCurve's properties.""" if name == "amplitude": self.amplitude = value elif name == "expansionFactor": self.expansionFactor = value elif name == "startAngle": self.startAngle = value elif name == "endAngle": self.endAngle = value </code></pre> <p>作为参考,这里是连接到上述插槽的代码-</p> <pre><code>def _connectToPage(self, page): for connectionData in page.getConnectibles(): self.connect(connectionData["object"], SIGNAL(connectionData["signal"]), lambda value, name = connectionData["property"]:\ self.currentCurve.propertyChanged(name, value)) self.connect(connectionData["object"], SIGNAL(connectionData["signal"]), self.hackedDisplayArea.update) </code></pre> <p><strong>注意</strong>-self.endAngle等在构造函数中初始化。</p> <p>据我所知,选择dict的原因是为了快速查找。什么时候可以保证?当我有100箱或更多?每次调用函数时,继续构建并丢弃字典是一个好主意吗?如果我在一个函数之外为此目的构建一个dict,我应该检查它是否需要其他地方吗?如果其他地方不需要,会发生什么?</p> <p>我的问题是,如果有的话,最好的做法是什么?什么是处理事情最好/最优雅的方法?换句话说,如果elif else</strong>,何时使用<strong>其他选项?</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>考虑到这是响应用户操作(从菜单中选择某些内容)而完成的,而且您预期的选择数量非常少,我肯定会使用一个简单的if elif else梯形图。</p> <p>选择速度是没有意义的,因为它只发生在用户可以选择的最快速度,这不是“光线跟踪器的内环”区域。当然,给用户快速的反馈是很重要的,但是由于案例数量太少,也没有这种危险。</p> <p>优化简洁性是没有意义的,因为(imo更清晰,零可读性开销)if梯形图无论如何都会很短。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
plt.savefig不会覆盖现有文件
10 回答
plt.savefig不保存图像
9 回答
plt.savefig在jupyter笔记本中不起作用
9 回答
plt.savefig在从另一个fi调用时停止工作
3 回答
plt.savefig在调用plt.show之前保存空数字
3 回答
plt.save不创建png文件
5 回答
plt.scatter overlay分类数据帧列
1 回答
Plt.Scatter:如何添加title、xlabel和ylab
6 回答
plt.scatter()绘图与Matplotlib中的plt.plot()绘图类似
9 回答
plt.scatter错误'NoneType'对象在成功运行后没有属性'sqrt'
9 回答
plt.set_title()中的标题字符串有误
6 回答
plt.show()
5 回答
plt.show()不在Jupyter笔记本上渲染任何内容
4 回答
plt.show()不打印plt.plot only plt.scatter
9 回答
plt.show()不显示三维散射图像
8 回答
plt.show()不显示任何内容
5 回答
plt.show()不显示数据,而是保留它供下一个图表使用(spyder)
6 回答
plt.show()使终端挂起
9 回答
plt.show()无法使用此代码
4 回答
plt.show()没有打开新的图形风
9 回答