Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python代码格式_Python - Fatal编程技术网

Python代码格式

Python代码格式,python,Python,在回答我的另一个问题时,有人建议我避免在代码中使用长行,并在编写Python代码时使用PEP-8规则。PEP-8规则之一建议避免使用超过80个字符的行。我改变了我的代码很多,以符合这一要求,没有任何问题。但是,以下面所示的方式更改以下行会破坏代码。你知道为什么吗?它是否与以下事实有关,即return命令后面的内容必须在一行中 该行长度超过80个字符: def __str__(self): return "Car Type \n"+"mpg: %.1f \n" % self.mpg

在回答我的另一个问题时,有人建议我避免在代码中使用长行,并在编写Python代码时使用PEP-8规则。PEP-8规则之一建议避免使用超过80个字符的行。我改变了我的代码很多,以符合这一要求,没有任何问题。但是,以下面所示的方式更改以下行会破坏代码。你知道为什么吗?它是否与以下事实有关,即
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)