파이썬에서 no-op을 수행하는 표준 방법은 무엇입니까?


160

파이썬에서 / elif / else 구문을 작성하는 경우가 종종 있으며, 발생할 수있는 옵션을 포함하고 싶지만 해당 동작이 아무것도하지 않는 옵션을 포함하고 싶습니다. 나는 if 문을 제외시킬 수 있다는 것을 알고 있지만 가독성을 위해 문장을 모두 포함하는 것이 도움이되므로 코드를 살펴보면 각 옵션의 결과로 어떤 일이 발생하는지 볼 수 있습니다. no-op을 어떻게 코딩합니까? 현재 다음과 같이하고 있습니다.

no_op = 0

if x == 0:
    y = 2 * a
elif x == 1:
    z = 3 * b
elif x == 3:
    no_op

(코드는 실제로 그것보다 상당히 길고 더 복잡합니다. 이것은 구조를 설명하기위한 것입니다).

나는 변수를 no-op로 사용하는 것을 좋아하지 않지만 내가 생각할 수있는 가장 작은 방법입니다. 더 좋은 방법이 있습니까?


1
이 생략 부호 ( ...)도 언급 할 가치가 있습니다. stackoverflow.com/a/6189281/38281
Patrick

답변:


288

no-op에는 패스 를 사용하십시오 .

if x == 0:
  pass
else:
  print "x not equal 0"

그리고 여기 또 다른 예가 있습니다 :

def f():
  pass

또는:

class c:
  pass

3
하나의 라이너로을 사용 doSQL = lambda *x:x합니다.
Cees Timmerman

2
"pass"대신 "None"을 사용할 수는 있지만 코드를 명확하게하지는 않습니다.
DevPlayer

이것은 특히 삼항 연산에서 지원 else됩니까?
Alexej Magura

2
@AlexejMagura 아니요 pass. 가치가 없기 때문 입니다. 또한 그것이 어떻게 유용 할 수 있는지 알 수 없습니다.
L3viathan


12

nop처럼 동작하는 기능이 필요한 경우

nop = lambda *a, **k: None
nop()

때로는 종속성을 선택적으로 만들 때 이와 같은 작업을 수행합니다.

try:
    import foo
    bar=foo.bar
    baz=foo.baz
except:
    bar=nop
    baz=nop

# Doesn't break when foo is missing:
bar()
baz()

1
이것은 nop명시 적으로 표현이 필요한 상황에서 (임의적 진술 과는 달리 qv docs.python.org/3/reference/simple_stmts.htmldocs.python.org/3/reference/compound_stmts) 필요한 경우 좋은 해결 방법 입니다. HTML ) - 예 이해력이나 같은 기존 코드 관용구에 자식 표현 등을 추천 lambda하거나 (금지를 신)으로 전달 될 수있는 문자열 eval(…)(QV되는 docs.python.org/3/library/functions.html# 필요한 경우 eval ).
fish2000

사용 lambdareusage에 대한 변수에 기능을 할당하는 나쁜 코딩 스타일이다. 거기에 있습니다 def.
Bachsau

0

또 다른 방법은 줄임표를 사용하는 것입니다.

def foo():
    ...

다른 객체의 이름을 지정하는 것보다 낫지는 않습니다. 당신은 또한 쓸 수 None, 136또는 "NothingHere". 그러나 파이썬의 올바른 필갭은 pass입니다.
Bachsau
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.