저는 파이썬을 배우는 과정에 있으며 pass
진술 에 관한 섹션에 도달했습니다 . 내가 사용하는 가이드 Null
는 일반적으로 자리 표시 자로 사용되는 설명문 으로 정의합니다 .
그래도 그 의미를 완전히 이해하지 못합니다. 누군가가 pass
진술이 사용될 간단한 / 기본 상황 과 왜 필요한지를 보여줄 수 있습니까 ?
답변
아직 구현하고 싶지 않은 메소드를 사용하여 새 클래스를 설계한다고 가정하십시오.
class MyClass(object):
def meth_a(self):
pass
def meth_b(self):
print "I'm meth_b"
를 생략 pass
하면 코드가 실행되지 않습니다.
그러면 다음을 얻습니다.
IndentationError: expected an indented block
요약하면,이 pass
진술은 특별한 것은 아니지만 여기에 설명 된 것처럼 자리 표시 자 역할을 할 수 있습니다.
답변
파이썬은 코드 블록 (후 그 구문 요구 사항이 if
, except
, def
, class
등) 비워 둘 수 없습니다 수 있습니다. 그러나 빈 코드 블록은 내가 본 가장 빈번한 사용 사례 인 아래 예제와 같이 다양한 컨텍스트에서 유용합니다.
따라서 코드 블록에서 아무 것도 발생 pass
하지 않으면 이러한 블록에을 생성하지 않으려면 a 가 필요합니다 IndentationError
. 또는 모든 문 ( Ellipsis
리터럴 ...
또는 문자열 과 같이 평가할 용어 포함 , 대부분은 docstring)을 사용할 수 있지만 pass
실제로는 아무 일도 일어나지 않아야하며 실제로 평가할 필요가 없으며 (적어도 일시적으로) 메모리에 저장됩니다.
-
(전부 또는)의 특정 유형 무시
Exception
(의 예를xml
)try: self.version = "Expat %d.%d.%d" % expat.version_info except AttributeError: pass # unknown
참고 : 에서 다음 예제와 같이 인상의 모든 유형을 무시
pandas
그것도 아마 호출자에게 전달해야한다 예외, 예를 잡는다 때문에, 일반적으로 생각된다 나쁜 관행KeyboardInterrupt
또는SystemExit
(또는HardwareIsOnFireError
– 당신은 어떻게 당신이하지 알 수 있습니까 특정 오류가 정의 된 사용자 정의 상자에서 실행 중입니다. 일부 호출 응용 프로그램은 알고 싶습니다.).try: os.unlink(filename_larry) except: pass
대신에
except Error:
또는 적어도이 경우에 사용하는 것이except OSError:
훨씬 더 나은 방법으로 간주된다. 내가 설치 한 모든 파이썬 모듈에 대한 빠른 분석으로 모든except ...: pass
문장 의 10 % 이상이 모든 예외를 포착하므로 파이썬 프로그래밍에서 여전히 빈번한 패턴입니다. -
새 동작을 추가하지 않는 예외 클래스 파생 (예 🙂
scipy
:class CompileError(Exception): pass
마찬가지로, 추상 기본 클래스로 의도 된 클래스에는 종종 명시 적으로 비어
__init__
있거나 서브 클래스가 파생해야하는 다른 메소드가 있습니다. (예를 들어pebl
)class _BaseSubmittingController(_BaseController): def submit(self, tasks): pass def retrieve(self, deferred_results): pass
-
해당 코드를 테스트하면 (에서 나온
mpmath
) 결과에 신경 쓰지 않고 몇 가지 테스트 값에 대해 올바르게 실행됩니다 .for x, error in MDNewton(mp, f, (1,-2), verbose=0, norm=lambda x: norm(x, inf)): pass
-
클래스 또는 함수 정의에서 종종 docstring이 블록의 유일한 것으로 실행되어야 하는 필수 명령문 으로 이미 존재 합니다. 그러한 경우, 블록은 “이것은 실제로 아무 것도하려는 의도가 없다”고 말하기 위해 docstring
pass
과 함께 포함될 수 있습니다pebl
.class ParsingError(Exception): """Error encountered while parsing an ill-formed datafile.""" pass
-
어떤 경우에는,
pass
제가 개인적으로 좋아하지만, 말을 자리 표시 자로 사용 “이 방법 / 클래스 / IF 블록이 / … 아직 구현되지 않았지만이 할 수있는 장소가 될 것”Ellipsis
문자를...
하기 위해 이 예와 이전 예에서 의도적 인 “no-op”를 엄격하게 구분합니다. ( Ellipsis 리터럴은 Python 3에서만 유효한 표현식입니다. )
예를 들어, 넓은 스트로크로 모델을 작성하면def update_agent(agent): ...
다른 사람들이 가질 수있는 곳
def update_agent(agent): pass
전에
def time_step(agents): for agent in agents: update_agent(agent)
update_agent
나중에 함수 를 작성하라는 알림으로 , 나머지 코드가 의도 한대로 작동하는지 확인하기 위해 이미 일부 테스트를 실행하십시오. (이 경우의 세 번째 옵션은raise NotImplementedError
. 특히 두 가지 경우에 유용합니다. “이 추상 메소드는 모든 서브 클래스에 의해 구현되어야합니다.이 기본 클래스에서이를 정의하는 일반적인 방법은 없습니다” 또는 ” 이 이름은 아직이 릴리스에서 구현되지 않았지만 서명 방식은 다음과 같습니다.” )
답변
구현되지 않은 함수의 자리 표시 자로 사용하는 것 외에도 pass
if-else 문을 작성하는 데 유용 할 수 있습니다 ( “명시 적 의미는 암시 적보다 낫습니다”).
def some_silly_transform(n):
# Even numbers should be divided by 2
if n % 2 == 0:
n /= 2
flag = True
# Negative odd numbers should return their absolute value
elif n < 0:
n = -n
flag = True
# Otherwise, number should remain unchanged
else:
pass
물론,이 경우 return
할당 대신에 사용 하지만, 돌연변이가 필요한 경우에는 이것이 가장 효과적입니다.
pass
여기를 사용하면 미래의 유지 관리 담당자 (자신 포함)에게 조건문 외부에 중복 단계를 두지 않도록 경고하는 데 특히 유용합니다. 위의 예 flag
에서, 구체적으로 언급 된 두 경우에 설정되지만 else
-case 에는 설정되지 않습니다 . 사용하지 않고 pass
, 미래의 프로그래머는 이동할 수있는 flag = True
외부 조건 – 따라서 설정 flag
에서 모든 사건을.
또 다른 경우는 파일의 맨 아래에 자주 상용구 기능이있는 경우입니다.
if __name__ == "__main__":
pass
일부 파일의 경우 pass
나중에 쉽게 편집하고 파일을 자체적으로 실행할 때 아무 일도 일어나지 않을 것임을 명시하기 위해 남겨 두는 것이 좋습니다 .
마지막으로 다른 답변에서 언급했듯이 예외가 발생했을 때 아무것도하지 않는 것이 좋습니다.
try:
n[i] = 0
except IndexError:
pass
답변
생각하는 가장 정확하고 가장 정확한 방법 pass
은 통역사에게 아무것도하지 말라고 명시 적으로 지시하는 방법입니다. 같은 방법으로 다음 코드를 :
def foo(x,y):
return x+y
“기능 foo (x, y)를 호출하면 레이블 x와 y가 나타내는 두 숫자를 합한 다음 결과를 되돌려줍니다”,
def bar():
pass
“함수 bar ()를 호출하면 아무 것도하지 마십시오.”
다른 답변은 매우 정확하지만 자리 표시와 관련이없는 몇 가지 경우에도 유용합니다.
예를 들어, 최근에 작업 한 약간의 코드에서 두 변수를 나눌 필요가 있었고 제수가 0 일 수있었습니다.
c = a / b
b가 0이면 분명히 ZeroDivisionError가 발생합니다. 이 특정 상황에서 b가 0 인 경우 c를 0으로 두는 것이 바람직한 동작이므로 다음 코드를 사용했습니다.
try:
c = a / b
except ZeroDivisionError:
pass
덜 표준적인 또 다른 사용법은 디버거에 중단 점을 배치하기에 편리한 장소입니다. 예를 들어, for … in 문의 20 번째 반복에서 디버거로 들어가는 약간의 코드가 필요했습니다. 그래서:
for t in range(25):
do_a_thing(t)
if t == 20:
pass
중단 점을 통과시킵니다.
답변
‘있는 그대로’사용될 수있는 일반적인 유스 케이스는 유형을 작성하기 위해 클래스를 대체하는 것입니다 (예 : 수퍼 클래스와 동일).
class Error(Exception):
pass
따라서 Error
예외를 발생 시키고 포착 할 수 있습니다 . 여기서 중요한 것은 내용이 아니라 예외 유형입니다.
답변
pass
파이썬에서는 기본적으로 아무것도하지 않지만 주석과 달리 해석기는 무시하지 않습니다. 따라서 자리 표시자를 만들어서 여러 곳에서 활용할 수 있습니다.
1 : 수업에서 사용 가능
class TestClass:
pass
2 : 루프 및 조건문에 사용할 수 있습니다.
if (something == true): # used in conditional statement
pass
while (some condition is true): # user is not sure about the body of the loop
pass
3 : 기능에서 사용될 수 있습니다 :
def testFunction(args): # programmer wants to implement the body of the function later
pass
pass
프로그래머가 현재 구현을 원하지는 않지만 나중에 사용할 수있는 특정 클래스 / 함수 / 조건문을 작성하려고 할 때 주로 사용됩니다. 파이썬 인터프리터는 공백 또는 구현되지 않은 클래스 / 함수 / 조건문을 허용하지 않으므로 오류가 발생합니다.
IndentationError : 들여 쓰기 블록이 예상되었습니다.
pass
이러한 시나리오에서 사용할 수 있습니다.
답변
pass 는 NOP (No Operation) 작업을 의미 한다고 말할 수 있습니다 . 이 예제 후에 명확한 그림을 얻을 수 있습니다 :-
C 프로그램
#include<stdio.h>
void main()
{
int age = 12;
if( age < 18 )
{
printf("You are not adult, so you can't do that task ");
}
else if( age >= 18 && age < 60)
{
// I will add more code later inside it
}
else
{
printf("You are too old to do anything , sorry ");
}
}
이제 어떻게 파이썬으로 작성합니까 :-
age = 12
if age < 18:
print "You are not adult, so you can't do that task"
elif age >= 18 and age < 60:
else:
print "You are too old to do anything , sorry "
그러나 elif 뒤에 들여 쓰기 블록이 필요했기 때문에 코드에 오류가 발생합니다 . pass 키워드 의 역할은 다음과 같습니다 .
age = 12
if age < 18:
print "You are not adult, so you can't do that task"
elif age >= 18 and age < 60:
pass
else:
print "You are too old to do anything , sorry "
이제 나는 당신에게 분명하다고 생각합니다.