저는 파이썬을 배우는 과정에 있으며 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. 특히 두 가지 경우에 유용합니다. "이 추상 메소드는 모든 서브 클래스에 의해 구현되어야합니다.이 기본 클래스에서이를 정의하는 일반적인 방법은 없습니다" 또는 " 이 이름은 아직이 릴리스에서 구현되지 않았지만 서명 방식은 다음과 같습니다.” )
구현되지 않은 함수의 자리 표시 자로 사용하는 것 외에도 passif-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서브 클래스의 메소드를 재정 의하여 아무것도하지 않으려는 경우 유용 할 것이라고 생각할 수 있습니다.