Wissen Sie, warum Python eine Pass-Anweisung hat?

coldplay.xixi
Freigeben: 2020-10-30 16:54:06
nach vorne
2456 Leute haben es durchsucht

In der Spalte „Python-Video-Tutorial“ wird erläutert, warum Python eine Pass-Anweisung benötigt.

Die pass-Anweisung in Python scheint sehr einfach zu sein (nur 4 Buchstaben), und selbst Anfänger ohne Programmiererfahrung können ihre Verwendung schnell erlernen. Wissen Sie, warum Python eine Pass-Anweisung hat?

Die Einführung des offiziellen Dokuments ist sehr einfach. Die folgenden drei Beispiele können uns schnell verstehen, wie man es verwendet:

Wissen Sie, warum Python eine Pass-Anweisung hat?
pass语句,它似乎很简单(只有 4 个字母),即使是没有任何编程经验的初学者也能很快地掌握它的用法。

官方文档 的介绍十分简单,下面的三个例子可以让我们快速地了解到如何使用它:

Wissen Sie, warum Python eine Pass-Anweisung hat?

简单而言,pass 是一种空操作(null operation),解释器执行到它的时候,除了检查语法是否合法,什么也不做就直接跳过。

它跟 return、break、continue 和 yield 之类的非空操作相比,最大的区别是它不会改变程序的执行顺序。它就像我们写的注释,除了占用一行代码行,不会对所处的作用域产生任何影响。

但是,如果你有其它语言的基础,你也许会好奇:为什么 Python 有这么独特的 pass 语句,而别的语言却没有?

Python 这么设计,到底是出于什么原因呢?

是为了解决大部分编程语言都要面对的共性问题,还是因为它有自己的新发现,所以创造出来一个新的特性?

换句话说:Python 为什么要有 pass 语句,它能解决什么问题(好处),如果没有它,会导致什么问题(坏处)?

接下来,本文将从两个维度展开分析。

1、对人:作为空间占位符

我把它看作是一种言简意赅的注释方式,等于是说“这里先预留位置,回头再补上具体的代码实现”。

比如在多层的 if-elif-else 结构中,我们可以先把判断条件写好,然后在对应的块中写上 pass,以后再慢慢完善。

比如上文中给出的例子,我们可以先写好类/函数名及其入参,然后跳过(pass)主体代码,以后再慢慢填充。

pass 写起来简单,而且由于是关键字,IDE 会给出显眼的颜色区分,所以就比我们写上注释内容来得方便些。

pass 作为空间占位符,主要可以方便我们构思局部的代码结构,有一定的辅助提醒作用。

但是,若作为一种注释方式,它就显得太单薄了,比不上写“# todo: xxxx”,后者也会被 IDE 用颜色突显,而且意思更明确。虽然写起来简单,但它也引入了一个看似多余的关键字 pass。

所以,从空间占位符的角度来看,pass 不是编程语言中必须的设计要素。

有了它,我们可以表达出“此处有东西,但暂时跳过”的语义,但如果没有它,则可以用注释内容来替代。

2、对机器:为了语法完整性

对于前一条的用法,pass 出现在代码中的位置在理论上是不受限的。

但是,我们最常使用 pass 时,基本是在冒号的下一行,而且在该层缩进的代码块中,只有这一条语句。(参见前文的 3 个例子,为了方便,我们仅以以空函数为例)

我们可以设想下,如果不写它,会怎样?

答案是会报缩进错误:IndentationError: expected an indented block

# 将函数体的 pass 去除,会报错def func():func()复制代码
Nach dem Login kopieren

因为 Python 使用缩进来划分代码块(至于原因,请查阅《Python为什么使用缩进来划分代码块?》),而冒号标识着要出现新的缩进代码块,所以这个例子会报缺少缩进代码块。

如果我们用前文说的注释来替代,看看会怎样?

# 将函数体的 pass 换成注释def func():
    # todo:此处有东西,以后补上func()复制代码
Nach dem Login kopieren

这样写,也会报错:IndentationError: expected an indented block

原因是注释并非有效的语法内容,它会被 Python 解释器忽略掉(ignore),不像 pass 语句那样是“有效的语法内容,但是跳过”。

也就是说,缩进代码块中必须包含有语法意义的内容,下面的例子都是有效的:

def func():
    """这是一个字符串"""def func2():
    123456复制代码
Nach dem Login kopieren

Python 在定义函数时,必须包含函数体,即同时包含声明加定义两种语义,不能像某些语言可以只使用声明的语义,即写成void test();

但是,由于 Python 不使用花括号,它无法像某些语言那样直接定义出空函数,即写成void test(){}Einfach ausgedrückt ist Pass ein Eine Nulloperation, wenn der Interpreter sie ausführt, prüft er lediglich, ob die Syntax zulässig ist, und überspringt sie einfach.

Im Vergleich zu nicht leeren Operationen wie Return, Break, Continue und Yield besteht der größte Unterschied darin, dass dadurch die Ausführungsreihenfolge des Programms nicht geändert wird. Es ist wie ein Kommentar, den wir schreiben, nur dass er eine Codezeile einnimmt und keinen Einfluss auf den Bereich hat, in dem er sich befindet.

🎜Wenn Sie jedoch über Kenntnisse in anderen Sprachen verfügen, sind Sie vielleicht neugierig:Warum hat Python eine so einzigartige Pass-Anweisung, andere Sprachen jedoch nicht? 🎜🎜Warum ist Python so konzipiert? 🎜🎜Soll es die allgemeinen Probleme lösen, mit denen die meisten Programmiersprachen konfrontiert sind, oder handelt es sich um eine neue Funktion, die aufgrund ihrer eigenen neuen Entdeckungen geschaffen wurde? 🎜🎜Mit anderen Worten:Warum hat Python eine Pass-Anweisung, welche Probleme löst sie (Vorteile) und welche Probleme würde sie ohne sie verursachen (Nachteile)? 🎜🎜Als nächstes wird dieser Artikel aus zwei Dimensionen analysiert. 🎜

1. Für Menschen: als Leerzeichen-Platzhalter🎜🎜Ich betrachte es als eine prägnante und umfassende Art des Kommentierens, was gleichbedeutend ist mit der Aussage „ Reservieren Sie hier zuerst einen Platz und fügen Sie dann später die spezifische Code-Implementierung hinzu. 🎜🎜Zum Beispiel können wir in einer mehrschichtigen if-elif-else-Struktur zuerst die Beurteilungsbedingungen schreiben, dann pass in den entsprechenden Block schreiben und ihn später langsam verbessern. 🎜🎜Zum Beispiel können wir im oben angegebenen Beispiel zuerst den Klassen-/Funktionsnamen und seine Eingabeparameter schreiben, dann den Hauptcode überspringen (übergeben) und ihn später langsam ausfüllen. 🎜🎜pass ist einfach zu schreiben, und da es sich um ein Schlüsselwort handelt, bietet Ihnen die IDE auffällige Farbunterscheidungen, sodass es bequemer ist als das Schreiben von Kommentaren. 🎜🎜pass Als Platzhalter für Leerzeichen erleichtert es uns hauptsächlich das Verständnis der lokalen Codestruktur und hat einen gewissen zusätzlichen Erinnerungseffekt. 🎜🎜Allerdings ist es als Kommentarmöglichkeit zu dünn und dem Schreiben von „# todo: xxxx“ unterlegen. Letzteres wird von der IDE auch farblich hervorgehoben und hat eine klarere Bedeutung. Obwohl es einfach zu schreiben ist, führt es auch eine scheinbar überflüssige Schlüsselwortübergabe ein. 🎜🎜Aus der Perspektive eines Platzhalters ist „pass“ also kein notwendiges Designelement in Programmiersprachen. 🎜🎜Damit können wir die Semantik von „Hier ist etwas, aber überspringe es vorerst“ ausdrücken, aber ohne sie kann sie durch Anmerkungsinhalt ersetzt werden. 🎜

2. Für die Maschine: Aus Gründen der grammatikalischen Vollständigkeit🎜🎜Für die Verwendung des vorherigen Elements ist die Position, an der pass im Code erscheint, theoretisch uneingeschränkt. 🎜🎜Wenn wir pass jedoch am häufigsten verwenden, befindet es sich grundsätzlich in der Zeile neben dem Doppelpunkt, und auf dieser Ebene gibt es im eingerückten Codeblock nur diese eine Anweisung. (Siehe die vorherigen 3 Beispiele. Der Einfachheit halber nehmen wir nur die leere Funktion als Beispiel) 🎜🎜Wir können uns vorstellen, was passieren würde, wenn wir sie nicht schreiben würden? 🎜🎜Die Antwort ist, dass ein Einrückungsfehler gemeldet wird: IndentationError: erwartet einen eingerückten Block🎜rrreee🎜Da Python Einrückungen verwendet, um Codeblöcke zu unterteilen (den Grund finden Sie unter „Warum tut Python Verwenden Sie Einrückungen, um Codeblöcke zu unterteilen? 🎜🎜Was wäre, wenn wir es durch die oben genannte Anmerkung ersetzen würden? 🎜rrreee🎜Wenn Sie so schreiben, wird auch ein Fehler gemeldet: IndentationError: erwartet ein eingerückter Block🎜🎜Der Grund dafür ist, dass der Kommentar kein gültiger grammatikalischer Inhalt ist. Er wird vom Python-Interpreter ignoriert (ignore ), im Gegensatz zur pass-Anweisung. Das ist „gültiger Syntaxinhalt, aber übersprungen“. 🎜🎜Mit anderen Worten, der eingerückte Codeblock muss grammatikalisch bedeutsamen Inhalt enthalten. Die folgenden Beispiele sind alle gültig: 🎜rrreee🎜Python Bei der Definition einer Funktion muss sie den Funktionskörper enthalten, das heißt, sie enthält sowohl Deklarations- als auch Definitionssemantik. Im Gegensatz zu einigen Sprachen, die nur deklarierte Semantik verwenden können, ist sie als void test(); geschrieben. 🎜🎜Da Python jedoch keine geschweiften Klammern verwendet, kann es nicht wie einige Sprachen direkt eine leere Funktion definieren, die als void test(){} geschrieben wird. 🎜🎜Basierend auf der obigen Analyse muss Python beim Definieren einer leeren Funktion über einen zulässigen Funktionskörper verfügen, daher ist eine Pass-Anweisung so konzipiert, dass sie einen No-Op darstellt. Es dient der Vervollständigung der Syntax und entspricht zusammen mit dem Doppelpunkt einem leeren Klammerpaar in anderen Sprachen. 🎜

Aus Sicht der grammatikalischen Integrität ist es ein notwendiges Gestaltungselement. Wenn es nicht verfügbar ist, muss es durch ähnliche leere Aussagen oder spezielle Symbole ersetzt werden.

Für Menschen kann „pass“ „vorübergehend überspringen“ bedeuten, als temporärer Platzhalter, der schließlich durch die tatsächliche Code-Implementierung für Maschinen ersetzt wird, kann es „direktes Überspringen“ bedeuten, nur für Die Syntaxlogik ist abgeschlossen und wird nicht durch andere Codes ersetzt werden.

Andere Sprachen verfügen nicht über einen speziellen Satz oder ein spezielles Symbol, um diese Art von Platzhalter darzustellen (d. h. es fehlt die Semantik), aber sie müssen sich nicht die Mühe machen, ein Schlüsselwort zu entwerfen, um die grammatikalische Integrität zu vervollständigen (d. h. die Grammatik ist vollständig).

Zurück zur Frage am Anfang dieses Artikels: Warum hat Python eine Pass-Anweisung, welche Probleme löst sie (Vorteile) und welche Probleme wird sie ohne sie verursachen (Nachteile)?

Python verwendet die Pass-Anweisung, um reine Codeblöcke ohne Operation (leere Funktionen, leere Klassen, leere Schleifenkontrollblöcke usw.) zu unterstützen. Damit kann es auch eine zusätzliche Platzhaltersemantik ausdrücken.

Ersteres ist für Maschinen und muss vorhanden sein, was der Rolle leerer geschweifter Klammern in anderen Sprachen entspricht. Letzteres ist für Menschen und nicht notwendig und kann durch Kommentare ausgedrückt werden, sondern weil Python diese Anweisung und diese entworfen hat Die Verwendung ist manchmal recht praktisch.

Verwandte kostenlose Lernempfehlungen: Python-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWissen Sie, warum Python eine Pass-Anweisung hat?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:juejin.im
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage