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问题
尝试加密和解密文本文件(Python)
9 回答
尝试加密文本文件会导致类型错误
4 回答
尝试加密时溢出错误
9 回答
尝试加载.plist文件时出现“无此类文件或目录”错误
3 回答
尝试加载“blog.templatetags.blog_标记”时引发ImportError:没有名为“markdown”的模块
2 回答
尝试加载“menus.templatetags.menus\u标记”时引发ImportError:无法从“menus.models”导入名称“menus”
8 回答
尝试加载5GB文本fi时发生Python内存错误
9 回答
尝试加载5GB文本文件时出现MemoryError
7 回答
尝试加载Django模板时出现渲染错误
1 回答
尝试加载exi时出错
9 回答
尝试加载imag时使用精灵表失败
8 回答
尝试加载json.Python时出错
8 回答
尝试加载json文件时遇到此错误:json.decoder.jsondeCoderror:预期值:第1行第1列(char 0)
5 回答
尝试加载keras和tensorflow,我仍然得到ModuleNotFoundError:在我的Anaconda环境中没有名为'tensorflow_core.estimator'的模块
8 回答
尝试加载Librosa的示例fi时出现“找不到文件”错误
4 回答
尝试加载matplotlib时发生iPython笔记本错误
5 回答
尝试加载MP3时出现PyGame错误
9 回答
尝试加载pickled matplotlib figu时发生AttributeError
10 回答
尝试加载pickle文件时出错
10 回答
尝试加载Pytoch模型时遇到问题:“在模块中找不到标识”
9 回答