我刚刚开始使用Python - 我的重点是将它与Maya及其API一起使用 - 而且我发现当我正在处理某些事情时,通常至少有2或3种方法来实现同样我想做的事情。例如:
for key, value in locNameConnector.iteritems():
value = locNameConnector[key]
cmds.connectJoint(value, key, pm=True)
或
for name in locNameConnector:
cmds.connectJoint(locNameConnector[name][0], name, pm=True)
现在代码在Maya中调用特定的东西,但我的问题是,哪种方式更正确?我觉得第一个是因为它利用了Python的力量,而第二个可以用任何语言编写。有更正确的方法吗?一个比另一个快吗?
答案 0 :(得分:5)
Python的一个哲学是:
应该有一种 - 最好只有一种 - 显而易见的方法。
(通过在Python shell中执行import this
,您可以看到这些列表 - 称为The Zen of Python。)
Python确实试图让它真正只有一种方式。但是对于超出基本功能水平的任何语言,总会有不止一种方法来做任何非平凡的事情 - 这就是编程的方式。但即使有不止一种方式,通常也会有一种被认为更像“Pythonic”的方式。
关于您的实际示例,它们似乎并不相同 - 第一个在value
中查找l_LegJointConnectors
,第二个在locNameConnector
查找。第一个例子中的第二行是否应该存在?如果没有,第一个肯定比第二个更像Pythonic。
答案 1 :(得分:1)
通常有多种方法可以满足规范,但通常只有一种正确的方法。这实际上是Python的中心设计原则(与Perl相反)。在您的示例中,当您需要键值对而不是仅键或仅值时,请使用iteritems
。
答案 2 :(得分:0)
我跟随校长“任何有效的东西”。问问自己 - 哪种方式可以满足我/我的代码/应用程序最好是绰绰有余
但是,如果他们看到任何不是“pythonic”的python代码,那么hardcore-python程序员会非常生气。一个很好的解读是here。
答案 3 :(得分:0)
你的问题很模糊。这肯定取决于你想做什么,但很少有一种方法可以做一般事情,同样适用于python。有些方法可以将人们称为 pythonic ,尽管这是主观的,取决于谁在看代码。阅读标准库中着名的pythonista和 timsort 的作者Tim Peters阅读zen of python,以了解编写python代码的一些好方法。