저는 파이썬을 배우는 과정에 있으며 pass
진술 에 관한 섹션에 도달했습니다 . 내가 사용하는 가이드 Null
는 일반적으로 자리 표시 자로 사용되는 설명문 으로 정의합니다 .
그래도 그 의미를 완전히 이해하지 못합니다. 누군가가 pass
진술이 사용될 간단한 / 기본 상황 과 왜 필요한지를 보여줄 수 있습니까 ?
pass
에서 except
블록 매우 유용합니다.
저는 파이썬을 배우는 과정에 있으며 pass
진술 에 관한 섹션에 도달했습니다 . 내가 사용하는 가이드 Null
는 일반적으로 자리 표시 자로 사용되는 설명문 으로 정의합니다 .
그래도 그 의미를 완전히 이해하지 못합니다. 누군가가 pass
진술이 사용될 간단한 / 기본 상황 과 왜 필요한지를 보여줄 수 있습니까 ?
pass
에서 except
블록 매우 유용합니다.
답변:
아직 구현하고 싶지 않은 메소드를 사용하여 새 클래스를 설계한다고 가정하십시오.
class MyClass(object):
def meth_a(self):
pass
def meth_b(self):
print "I'm meth_b"
를 생략 pass
하면 코드가 실행되지 않습니다.
그러면 다음을 얻습니다.
IndentationError: expected an indented block
요약하면,이 pass
진술은 특별한 것은 아니지만 여기에 설명 된 것처럼 자리 표시 자 역할을 할 수 있습니다.
pass
하지만 여전히 그 기능을 이해하지 못합니다. 프로덕션 코드에서 이것을 사용합니까? 귀하의 예에서, 구현 할 준비가 될 때까지 해당 메소드를 추가하지 않거나 단순히 수행하려고 return
합니다.
파이썬은 코드 블록 (후 그 구문 요구 사항이 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
flag = False
앞에 설정 해야합니다 if ... elif
. 두 번째 예제와 관련하여 if __name__ == "__main__": pass
직접 실행할 때 아무 것도하지 않는 대다수의 Python 파일 에 추가 해야하는 것은 bizzar처럼 보입니다 (모듈 코드를 작성할 때). Python> = 3.0에서는 "나중에 완료"블록을 표시하는 ...
대신 (줄임표) 를 사용해야합니다 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
중단 점을 통과시킵니다.
def bar(): pass
"절대적으로 아무것도"하지 않습니다. 여전히 None
암시 적으로 반환합니다 .
'있는 그대로'사용될 수있는 일반적인 유스 케이스는 유형을 작성하기 위해 클래스를 대체하는 것입니다 (예 : 수퍼 클래스와 동일).
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 "
이제 나는 당신에게 분명하다고 생각합니다.
&&
파이썬에는 연산자가 없습니다
테스트를 스텁 아웃 할 때 사용하고 싶습니다. 나는 종종 테스트하고 싶은 것을 알고 있지만 어떻게 해야할지 잘 모른다. 테스트 예제는 sebastian_oe가 제안한 것과 같습니다.
class TestFunctions(unittest.TestCase):
def test_some_feature(self):
pass
def test_some_other_feature(self):
pass
assert False
, assert 0
이렇게 하면 항상 구현을 추가해야합니다.
솔직히 공식적인 파이썬 문서 는 그것을 잘 설명하고 몇 가지 예를 제공 한다고 생각합니다 .
패스 문은 아무것도하지 않습니다. 명령문이 구문 상 필요하지만 프로그램에 조치가 필요하지 않을 때 사용할 수 있습니다. 예를 들면 다음과 같습니다.
>>> while True: ... pass # Busy-wait for keyboard interrupt (Ctrl+C) ...
이것은 일반적으로 최소 클래스를 만드는 데 사용됩니다.
>>> class MyEmptyClass: ... pass ...
새 코드를 작업 할 때 함수 또는 조건부 본문의 자리 표시 자로 사용할 수있는 또 다른 장소 패스 를 사용하여보다 추상적 인 수준으로 계속 생각할 수 있습니다. 패스는 자동으로 무시됩니다 :
>>> def initlog(*args): ... pass # Remember to implement this! ...
책에서 말했듯이 나는 단지 임시 자리 표시 자로 만 사용합니다.
# code that does something to to a variable, var
if var == 2000:
pass
else:
var += 1
나중에 시나리오를 작성하십시오. var == 2000
주어진 조건이 참이고 다음 명령문이 전달되면 전달은 해당 값 또는 반복을 무시하고 다음 행으로 진행합니다.
For i in range (1,100):
If i%2==0:
Pass
Else:
Print(i)
출력 : 1-100의 모든 홀수를 인쇄합니다
짝수의 모듈러스가 0과 같기 때문에 홀수의 모듈러스가 0이 아니기 때문에 숫자를 무시하고 다음 숫자로 진행하기 때문에 루프의 다른 부분이 실행되고 인쇄됩니다.
SyntaxError
. 또한, 이것은 pass
당신이 간단하게 할 수 있기 때문에 잘 사용되지 않습니다for i in range(1,100):print(i)if i%2else""
다음은 여러 데이터 유형이있는 목록에서 특정 데이터를 추출하는 예입니다 (R에서 호출하는 것입니다-잘못된 명명법 인 경우 미안합니다). 정수 / 숫자 및 NOT 문자 데이터 만 추출하고 싶었습니다. .
데이터는 다음과 같습니다.
>>> a = ['1', 'env', '2', 'gag', '1.234', 'nef']
>>> data = []
>>> type(a)
<class 'list'>
>>> type(a[1])
<class 'str'>
>>> type(a[0])
<class 'str'>
나는 모든 알파벳 문자를 제거하고 싶었 기 때문에 데이터를 서브 셋팅하고 알파벳 데이터를 "통과"함으로써 머신이 처리하도록했다.
a = ['1', 'env', '2', 'gag', '1.234', 'nef']
data = []
for i in range(0, len(a)):
if a[i].isalpha():
pass
else:
data.append(a[i])
print(data)
['1', '2', '1.234']
구문이 구문 적으로 필요하지만 명령이나 코드를 실행하지 않으려는 경우 Python의 pass 문이 사용됩니다.
pass 문은 null 연산입니다. 실행될 때 아무 일도 일어나지 않습니다. 이 패스는 코드가 최종적으로 작성되지만 아직 작성되지 않은 장소에서도 유용합니다 (예 : 스텁).
`예 :
#!/usr/bin/python
for letter in 'Python':
if letter == 'h':
pass
print 'This is pass block'
print 'Current Letter :', letter
print "Good bye!"
결과는 다음과 같습니다.
Current Letter : P
Current Letter : y
Current Letter : t
This is pass block
Current Letter : h
Current Letter : o
Current Letter : n
Good bye!
문자 값이 'h'인 경우 앞의 코드는 명령문이나 코드를 실행하지 않습니다. pass 문은 코드 블록을 만들 때 유용하지만 더 이상 필요하지 않습니다.
그런 다음 블록 내부의 명령문을 제거 할 수 있지만 블록이 코드의 다른 부분을 방해하지 않도록 패스 명령문을 유지하도록 할 수 있습니다.
파이썬에서 들여 쓰기 오류를 피하기 위해 pass가 사용됩니다. c, c ++, java와 같은 언어를 사용하면
if(i==0)
{}
else
{//some code}
그러나 파이썬에서는 중괄호 대신 들여 쓰기를 사용 했으므로 이러한 오류를 피하기 위해 pass를 사용합니다. 당신이 퀴즈를 연주하고 기억
if(dont_know_the_answer)
pass
예제 프로그램
for letter in 'geeksforgeeks':
pass
print 'Last Letter :', letter
pass
서브 클래스의 메소드를 재정 의하여 아무것도하지 않으려는 경우 유용 할 것이라고 생각할 수 있습니다.