> 백엔드 개발 > 파이썬 튜토리얼 > Python에 왜 pass 문이 있는지 아시나요?

Python에 왜 pass 문이 있는지 아시나요?

coldplay.xixi
풀어 주다: 2020-10-30 16:54:06
앞으로
2490명이 탐색했습니다.

Python 동영상 튜토리얼 칼럼에서는 Python에 pass 문이 필요한 이유를 소개합니다.

Python에 왜 pass 문이 있는지 아시나요?

Python의 pass 문은 매우 간단해 보이며(단 4글자), 프로그래밍 경험이 없는 초보자도 사용법을 빠르게 익힐 수 있습니다. pass语句,它似乎很简单(只有 4 个字母),即使是没有任何编程经验的初学者也能很快地掌握它的用法。

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

Python에 왜 pass 문이 있는지 아시나요?

简单而言,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()复制代码
로그인 후 복사

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

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

# 将函数体的 pass 换成注释def func():
    # todo:此处有东西,以后补上func()复制代码
로그인 후 복사

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

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

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

def func():
    """这是一个字符串"""def func2():
    123456复制代码
로그인 후 복사

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

但是,由于 Python 不使用花括号,它无法像某些语言那样直接定义出空函数,即写成void test(){}

공식 문서의 소개는 매우 간단합니다. 다음 세 가지 예를 통해 사용 방법을 빠르게 이해할 수 있습니다.

Python에 왜 pass 문이 있는지 아시나요?

간단히 말하면 패스는 null 연산입니다. 인터프리터가 이를 실행할 때 구문이 적합한지 확인하고 건너뛰는 것 외에는 아무 작업도 수행하지 않습니다. 🎜🎜Return, Break, Continue, Yield 등 비어 있지 않은 연산과 비교할 때 가장 큰 차이점은 프로그램의 실행 순서를 변경하지 않는다는 것입니다. 이는 코드 한 줄을 차지하고 그것이 위치한 범위에 아무런 영향을 미치지 않는다는 점을 제외하면 우리가 작성하는 주석과 같습니다. 🎜🎜그러나 다른 언어에 대한 기초가 있다면 다음과 같은 궁금증이 생길 수 있습니다. 파이썬에는 왜 이렇게 독특한 pass 문이 있는데 다른 언어에는 없는 걸까요? 🎜🎜파이썬은 왜 이런 식으로 설계되었나요? 🎜🎜대부분의 프로그래밍 언어가 직면한 일반적인 문제를 해결하기 위한 것입니까, 아니면 자체적인 새로운 발견으로 인해 만들어진 새로운 기능입니까? 🎜🎜즉, 파이썬에 pass 문이 있는 이유는 무엇이며, 이것이 해결하는 문제는 무엇이며(이점), 그것이 없으면 어떤 문제가 발생합니까(단점)? 🎜🎜다음으로 이 글은 두 가지 차원에서 분석해보겠습니다. 🎜

1. 사람들의 경우: 공간 자리 표시자로서🎜🎜간결하고 포괄적인 댓글 작성 방법으로 간주합니다. 이는 "이라고 말하는 것과 같습니다. 먼저 여기에서 장소를 예약한 다음 나중에 특정 코드 구현을 추가하세요." 🎜🎜예를 들어 다층 if-elif-else 구조에서는 판단 조건을 먼저 작성한 다음 해당 블록에 pass를 쓴 다음 나중에 천천히 개선할 수 있습니다. 🎜🎜예를 들어 위에 주어진 예에서는 먼저 클래스/함수 이름과 해당 입력 매개변수를 작성한 다음 메인 코드를 건너뛰고(통과) 나중에 천천히 채울 수 있습니다. 🎜🎜pass는 작성하기 쉽고, 키워드이기 때문에 IDE에서 색상 구별이 눈에 띄게 해주기 때문에 댓글 작성보다 편리합니다. 🎜🎜pass 공백 자리 표시자로서 주로 지역 코드 구조를 이해하는 데 도움이 되며 특정 보조 알림 효과가 있습니다. 🎜🎜하지만 댓글 방식으로는 "# todo:xxxx"라고 쓰는 것보다 너무 얇아서 열등합니다. 후자도 IDE에서 색상으로 강조 표시되어 더 명확한 의미를 갖습니다. 작성하기는 간단하지만 중복되는 것처럼 보이는 키워드 패스도 도입합니다. 🎜🎜따라서 공간 자리 표시자 관점에서 보면 pass는 프로그래밍 언어에서 필수적인 디자인 요소가 아닙니다. 🎜🎜그것을 사용하면 "여기에 뭔가가 있지만 지금은 건너뛴다"라는 의미를 표현할 수 있지만, 그것이 없으면 주석 콘텐츠로 대체될 수 있습니다. 🎜

2. 기계의 경우: 문법적 완성도를 위해🎜🎜이전 항목의 사용법에 있어서 코드에서 pass가 나타나는 위치는 이론적으로 무제한. 🎜🎜그러나 pass를 가장 자주 사용할 때는 기본적으로 콜론 옆 줄에 있고, 이 수준에서 들여쓰기된 코드 블록에는 이 명령문 하나만 있습니다. (앞의 3가지 예시를 참고하세요. 편의상 빈 함수만 예로 들어보겠습니다.) 🎜🎜만약 작성하지 않으면 어떻게 될지 상상이 가시나요? 🎜🎜답은 들여쓰기 오류가 보고된다는 것입니다: IndentationError:expected an indented block🎜rrreee🎜Python은 들여쓰기를 사용하여 코드 블록을 나누기 때문입니다(이유는 "Python은 왜 들여쓰기를 사용하여 코드 블록을 나누시겠습니까?" 》), 콜론은 들여쓰기된 새 코드 블록의 모양을 표시하므로 이 예에서는 들여쓰기된 코드 블록이 누락되었음을 보고합니다. 🎜🎜위에서 언급한 주석으로 대체하면 어떻게 되나요? 🎜rrreee🎜이와 ​​같이 작성하면 오류도 보고됩니다: IndentationError:expected an indented block🎜🎜이유는 주석이 유효한 문법 내용이 아니기 때문입니다. Python 인터프리터에서 무시됩니다(무시 ), pass 문과 달리 이는 "유효한 구문 내용이지만 건너뛰었습니다"입니다. 🎜🎜즉, 들여쓰기된 코드 블록에는 문법적으로 의미 있는 내용이 포함되어야 합니다. 다음 예는 모두 유효합니다. 🎜rrreee🎜Python 함수를 정의할 때 함수 본문을 포함해야 합니다. 즉, 선언 및 정의 의미를 모두 포함합니다. 선언된 의미 체계만 사용할 수 있는 일부 언어, 즉 void test();로 작성된 언어와는 다릅니다. 🎜🎜그러나 Python은 중괄호를 사용하지 않기 때문에 일부 언어처럼 void test(){}로 작성되는 빈 함수를 직접 정의할 수 없습니다. 🎜🎜위 분석에 따르면 Python은 빈 함수를 정의할 때 적법한 함수 본문이 있어야 하므로 pass 문은 no-op를 나타내도록 설계되었습니다. 이는 구문을 완성하기 위한 것이며 콜론과 함께 다른 언어의 빈 중괄호 쌍과 동일합니다. 🎜

문법적 무결성의 관점에서 볼 때 필요한 디자인 요소입니다. 사용할 수 없는 경우 유사한 빈 문장이나 특수 기호로 대체해야 합니다.

사람들에게 pass는 임시 자리 표시자로서 "일시적으로 건너뛰기"를 의미할 수 있으며 이는 결국 기계의 실제 코드 구현으로 대체될 수 있으며 구문 논리가 완료되었지만 그렇지 않은 경우에는 "직접 건너뛰기"를 의미할 수 있습니다. 다른 코드로 대체됩니다.

다른 언어들은 이런 자리 표시자를 표현하기 위한 특별한 문장이나 기호가 없지만(즉, 의미론이 부족함), 문법적 무결성을 완성하기 위해 굳이 키워드를 디자인할 필요가 없습니다(즉, 문법이 완성되었습니다).

이 글의 시작 부분에 있는 질문으로 돌아가서: Python에는 왜 pass 문이 있고, 어떤 문제가 해결되며(이점), Pass 문이 없으면 어떤 문제가 발생합니까(단점)?

Python은 pass 문을 사용하여 순수하게 연산이 없는 코드 블록(빈 함수, 빈 클래스, 빈 루프 제어 블록 등)을 지원하며 이를 통해 추가 자리 표시자 의미 체계를 표현할 수도 있습니다.

전자는 기계용이므로 반드시 있어야 하며, 후자는 인간용이므로 필요하지 않고 주석으로 표현할 수 있지만 Python은 이 명령문과 이 사용법은 때로는 매우 편리합니다.

관련 무료 학습 권장사항: python 비디오 튜토리얼

위 내용은 Python에 왜 pass 문이 있는지 아시나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:juejin.im
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿