我对python(2.7)很陌生,并且对于什么是Pythonic最有效的方法有疑问。我的代码(A类的一部分)貌似这个(有点天真版):Python风格:嵌套与额外功能
def calc_pump_height(self):
for i in range(len(self.primary_)):
for j in range(len(self.primary_)):
if self.connections_[i][j].sub_kind_ in [1,4]:
self.calc_spec_pump_height(i,j)
def calc_spec_pump_height(self,i,j):
pass
(显然通行证将被别的东西所取代,操纵这个类的对象的属性,而不会产生一个返回值)我想问我应该怎么做:我可以避免第二个函数,并将额外的代码直接写入第一个函数,摆脱一个函数(简单比复杂更好),但创建一个重度同时嵌套函数(Flat比嵌套更好)。
我还可以建立某种形式的名单理解,以避免使用双回路,例如:
def calc_pump_height(self):
ra = range(len(self.primary_))
[self.calc_spec_pump_height(i,j) for i,j in zip(ra, ra)]
(我不得不如果条件进入第二个功能;这也将创建一个空 - 但我不在乎这一点,因为calc_spec_pump_height
应该操纵对象,而不是返回一些有用的东西)
实质上:我遍历2D列表,测试每个对象的某个特征,然后用这个对象做些事情。
以上哪种方法是'最好的'?还是有另一种我失踪的方式?
恕我直言,第二种方式看起来很干净,但它可能只是我... – Dair
出于好奇,为什么你的一些属性的结束与_?在Python中,如果你试图指出某个类是私有的,那么你通常在开始时加一个下划线,而不是结尾。 – Ben
@Ben:你说得对,现在我知道了。这实际上是我刚开始使用Python时写的一段代码的一部分,我正在重写它,但没有重新命名变量(最初的想法是区分本地变量和类变量)。在Python中这是(除了违反标准)冗余由于'自我'。在我的其他项目(例如:编程微控制器)它不是。) – cfrei89