Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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,在自由形式语言中,有时我使用缩进来表示语句中的一些隐式结构。在下面的例子中,我只是做了一个序列打印< /COD>,但是缩进表示第一个和第四个打印语句是“包围”中间的两个。 print("<div>") print("hello") print("world") print("</div>") 一般来说,缩进在Python中很重要 您可以使用注释和行距: print("start") print("middle1") print("middle2") prin

在自由形式语言中,有时我使用缩进来表示语句中的一些隐式结构。在下面的例子中,我只是做了一个序列<代码>打印< /COD>,但是缩进表示第一个和第四个打印语句是“包围”中间的两个。

print("<div>")
  print("hello")
  print("world")
print("</div>")

一般来说,缩进在Python中很重要

您可以使用注释和行距:

print("start")

print("middle1")
print("middle2")

print("end")

您也可以考虑将代码分解为子函数,如果这样做是有意义的。

def printMiddle():
    print("middle1")
    print("middle2")

print("start")
printMiddle()
print("end")


但是,对于生成嵌套输出(如HTML)的特定用例,我建议使用模板库;通过字符串操作编写原始HTML可能会带来麻烦和错误(特别是在涉及值转义之类的事情时)。

我也记得有时需要这种结构。这就是我想到的(在允许这种错误缩进的C代码中):

请注意,我们有一个
开始
和一个
结束
,从这里开始,我将假设在您的情况下也会发生同样的情况:您希望表示某件事情的开始和结束。另一种情况是打开和关闭文件,甚至是问题中的示例。Python对此有一个特定功能:。Python文档甚至有一个与此完全一致的示例:

(不建议将此作为生成HTML的真正方法!):

从contextlib导入contextmanager
@上下文管理器
def标签(名称):
打印(“%name”)
产量
打印(“%name”)
>>>带标签(“h1”):
...    打印(“foo”)
...
福
我必须提到的是,上下文管理器不仅仅是重新构造代码的一种方式,它们实际上可以处理从所附代码引发的异常,并执行一些代码,而不考虑异常(例如,确保关闭文件)。对于使用
@contextmanager
的简单示例,这不会发生,因为它的默认行为是简单地重新引发异常,因此不会发生意外



除此之外,与你一起工作的人不会对错误的缩进感到高兴。如果你坚持这样做,当然,
如果真的话
是一个选项。

我有点不明白为什么要在代码中添加嵌套。我不认为两张照片上增加的缩进会提高可读性。而且这似乎是针对PEP中定义的风格代码,Python程序员对风格代码着迷。嗯,你可以,同样地,你可以编写C++中编译不到的代码。语法错误是语法错误——在Python中,缩进是语法的一部分。我想添加嵌套,因为如果我将所有内容都平面打印,那么就无法看到打印语句背后的实际结构。也许有一种很好的方法可以使用
with
语句用一对隐式打印环绕代码块?我只是注意到“括号”打印总是一样的,虽然它不能解决您的问题,但使用模板文件将是一种选择。它们基本上是从可变部分剥离出来的。将它们加载为HTML甚至可以突出显示语法。@UlrichEckhardt:HTML只是一个例子。我真正的问题是更一般的(有一个opengl的例子,我认为更好地说明了这个问题)谢谢!我不知道构建自己的上下文管理器这么容易。
# Header
print("start")
# Middle
print("middle1")
print("middle2")
# End
print("end")
def printMiddle():
    print("middle1")
    print("middle2")

print("start")
printMiddle()
print("end")
glBegin(GL_TRIANGLES);
    drawVertices();
glEnd();
from contextlib import contextmanager

@contextmanager
def tag(name):
    print("<%s>" % name)
    yield
    print("</%s>" % name)

>>> with tag("h1"):
...    print("foo")
...
<h1>
foo
</h1>