Python代码格式
在回答我的另一个问题时,有人建议我避免在代码中使用长行,并在编写Python代码时使用PEP-8规则。PEP-8规则之一建议避免使用超过80个字符的行。我改变了我的代码很多,以符合这一要求,没有任何问题。但是,以下面所示的方式更改以下行会破坏代码。你知道为什么吗?它是否与以下事实有关,即Python代码格式,python,Python,在回答我的另一个问题时,有人建议我避免在代码中使用长行,并在编写Python代码时使用PEP-8规则。PEP-8规则之一建议避免使用超过80个字符的行。我改变了我的代码很多,以符合这一要求,没有任何问题。但是,以下面所示的方式更改以下行会破坏代码。你知道为什么吗?它是否与以下事实有关,即return命令后面的内容必须在一行中 该行长度超过80个字符: def __str__(self): return "Car Type \n"+"mpg: %.1f \n" % self.mpg
return
命令后面的内容必须在一行中
该行长度超过80个字符:
def __str__(self):
return "Car Type \n"+"mpg: %.1f \n" % self.mpg + "hp: %.2f \n" %(self.hp) + "pc: %i \n" %self.pc + "unit cost: $%.2f \n" %(self.cost) + "price: $%.2f "%(self.price)
根据需要,使用输入
键和空格
更改行:
def __str__(self):
return "Car Type \n"+"mpg: %.1f \n" % self.mpg +
"hp: %.2f \n" %(self.hp) + "pc: %i \n" %self.pc +
"unit cost: $%.2f \n" %(self.cost) + "price: $%.2f "%(self.price)
Python不允许在这样的表达式中结束一行;最简单的解决方法是以反斜杠结束该行
def __str__(self):
return "Car Type \n"+"mpg: %.1f \n" % self.mpg + \
"hp: %.2f \n" %(self.hp) + "pc: %i \n" %self.pc + \
"unit cost: $%.2f \n" %(self.cost) + "price: $%.2f "%(self.price)
在这种情况下,反斜杠必须是行中的最后一个字符。本质上,它的意思是“忽略事实,这里有一条新线”。或者换句话说,你是在逃避新线,因为这通常是一个重大的突破
您可以在任何时候用反斜杠转义其他重要的换行符。这会很愚蠢,但你甚至可以这样做
def foo():
return \
1
因此
foo()
将返回1。如果没有反斜杠,则1本身会导致语法错误。多行字符串更易于阅读:
def __str__(self):
return '''\
Car Type
mpg: %.1f
hp: %.2f
pc: %i
unit cost: $%.2f
price: $%.2f'''% (self.mpg,self.hp,self.pc,self.cost,self.price)
要保持视觉上有意义的缩进级别,请使用textwrap.dedent
:
import textwrap
def __str__(self):
return textwrap.dedent('''\
Car Type
mpg: %.1f
hp: %.2f
pc: %i
unit cost: $%.2f
price: $%.2f'''% (self.mpg,self.hp,self.pc,self.cost,self.price))
可以通过将表达式放在括号中来解决此问题:
def __str__(self):
return ("Car Type \n"+"mpg: %.1f \n" % self.mpg +
"hp: %.2f \n" %(self.hp) + "pc: %i \n" %self.pc +
"unit cost: $%.2f \n" %(self.cost) + "price: $%.2f "%(self.price))
<>但是,我会考虑写得更像这样:(未经测试的代码)
它需要一点额外的设置,但是数据驱动的方法(具有良好的垂直对齐)很容易随着项目的发展而摸索和修改。它间接地消除了代码行过长的问题
def __str__(self):
dd = (
("Car Type %s", ''),
(" mpg: %.1f", self.mpg),
(" hp: %.2f", self.hp),
(" pc: %i", self.pc),
(" unit cost: $%.2f", self.cost),
(" price: $%.2f", self.price),
)
fmt = ''.join("%s\n" % t[0] for t in dd)
return fmt % tuple(t[1] for t in dd)
首先,请删除字符串连接并使用%s替换,这将大大缩短行。像这样的东西。”汽车类型\nmpg:%.1f\n%d马力:%.2f\npc:%i\n信息成本:$%.2f\nprice:$%.2f%.(self.mpg,self.hp,self.pc,self.cost,self.price)你甚至可以说出替代者的名字,以更清楚地说明你在做什么。政治公众人物的建议非常糟糕,已经过时;将代码压缩到79列是一种很好的方法,可以导致代码损坏,无法读取,正如PEP示例本身生动地演示的那样。120列要合理得多,因此需要拆分的行要少得多。80列屏幕不是一个严肃的开发环境。一个更好的解决方法是在表达式周围加上括号。请注意,
foo.bar
不等同于foo。Mike强调“我会考虑”。如果我在写\uuuu str\uuuuu
,我可能知道它们是否相等。vars(self)
看起来比self更干净。
(它也有相同的功能)这种方法的问题是缩进。长字符串没有缩进是很难看的。
def __str__(self):
dd = (
("Car Type %s", ''),
(" mpg: %.1f", self.mpg),
(" hp: %.2f", self.hp),
(" pc: %i", self.pc),
(" unit cost: $%.2f", self.cost),
(" price: $%.2f", self.price),
)
fmt = ''.join("%s\n" % t[0] for t in dd)
return fmt % tuple(t[1] for t in dd)