아니,이 확실히 파이썬 아닙니다 사용하는 것입니다. 길을 따라 내려진 결정의 많은 부분이 이런 종류의 코딩을 특별히 막아 버렸습니다. 자체 stuff
을 계산하는 것은 돌이킬 수없는// 비용 위험하지 않은 경우
if verbose:
print(stuff)
또는 단지를 확인하는 기능에 print
포장 :
이를 작성하는 올바른 방법은 확실한 방법입니다 플래그 :
def printv(*args, **kwargs):
if verbose:
print(*args, **kwargs)
... 당신이받을거야으로 그래서 당신은 단지에 대한 간결 인이를 수행 할 수 있습니다
,536,913,632 10
printv(stuff)
휠을 다시 제작하는 대신 logging
모듈을 사용하는 것이 더 좋습니다.
그러나 stuff
경우는 비용이, 그리고 당신이 정말로 라인을 저장하려면?
글쎄, 아마 라인을 저장할 필요가 없을 것입니다. 그렇게하면 간결성을 위해 항상 가독성을 희생합니다. "가독성 계산"은 the Zen of Python의 핵심 부분입니다.그러나 파이썬은이 조건으로 같은 줄에 한 줄 한 벌을 넣을 수 있도록 않습니다 PEP 8으로
if verbose: print(stuff)
그것을두고, "가끔은 괜찮아"하지만 "일반적으로 실망"입니다. 귀도 (Guido)가 아이디어 메일 링리스트의 이메일에 "선을 저장해야한다면, '영리한'것이 라기보다는 한줄의 if 문을 사용하십시오.하지만 선을 저장해야한다면, 코드를 읽으십시오. "
식에서이 원하는 경우 (이 당신은 내가 아래에 설명 할 것 같은 안) 또는 노골적으로 정신을 위반하는 동안은 문자로 기술적으로 다음과의 PEP 8 원하는 :
print(stuff) if verbose else None
을
그래서, 그것에 대해 파이썬 게 아니에요?
print
에 유용한 결과가없고 부작용이있을 때만 표현식에 print
의 결과를 사용하고 있습니다. 이것은 오도 된 것입니다.
그리고 일반적으로
는, 파이썬은 줄에 하나의 부작용을 가지고 있으며, 그것은 쉽게 코드를 훑어 변경 무엇을 볼 수있는 왼쪽 가능한에게까지 발생합니다. 이는 문장과 표현 사이의 강한 구분 (예를 들어, 문장이되는 과제)과 대신에 관용적으로
None
을 반환하는 부작용을 갖는 방법 등에 의해 강화됩니다.
그러나 결과를보기보다는 단락을 위해 and
및 or
을 사용하는 것은 모두 혼란스럽고 적어도 사람들의 생각에는 추악합니다. 그래서 세 번째 표현식 (spam if eggs else beans
)이 추가되었습니다. 사람들을 쓰지 못하게하려면 eggs and spam or beans
입니다. 왜 혼란 스럽습니까? 당신이 실제 영어보다 더 많은 펄 코드를 읽지 않는 한, 영어와 같이 읽을 수는 없습니다. 또 다른 경우에는 실수로 잘못된 값을 사용하는 것이 매우 쉽습니다. 당신은 그것을하지 말아야하고, 그것을 확인하기 위해, 당신이 if
을 볼 때, 그러나 당신은 여기 있지 않습니다. 또한 print(stuff) if verbose else None
은 사용자가 아무 것도하지 않고 값을 생성한다는 것을 명시 적으로 나타냅니다. 명시 적으로 항상 암시적인 것보다 낫지 만 특히 드문 일을 할 때는 특히 그렇습니다.
마지막으로, 성능 등 : (A) 고려하고 있으며, (b)는 왜 측정하는 대신 당신이 이해하지 않는 바이트 코드를 읽어 추측하려고하지? 그래서 당신이 갈
In [511]: quiet = True
In [512]: %timeit quiet or None
10000000 loops, best of 3: 48.2 ns per loop
In [513]: verbose=False
In [514]: %timeit if verbose: pass
10000000 loops, best of 3: 38.5 ns per loop
은 빠른 패스의 경우, if
문은하지 느린 그들이있어 모두 이제까지 프로그램에 영향을 미칠 가능성이 있다고 너무 빨리 어쨌든 실제로 약 20 % 빠른입니다 . 10 억 배를 빡빡한 루프에서 수행하면서 그 성능을 압박해야한다면 루프의 나머지 부분을 들어 올리려는 것입니다. 코드 (특히, print
이없는 루프가 캐시 등에 적합 할 가능성이 더 크다는 것을 고려하면).
왜 그런지 알고 싶다면 특정 구현의 특정 버전에 대한 바이트 코드의 구현을 살펴 봐야 할 것입니다.하지만 대부분의 경우, 대신에 POP_TOP
을 수행해야합니다. 이전 작업으로 병합 된 것이 차이의 일부입니다.
제발하지 마세요. – PaulMcG
좋은 생각 같아요 :) –
PHP 프로그래머가 아닌 사람에게는 더 좋지 않습니다. 선을 저장하는 한, 당신이 사는 곳에 선이 부족합니까? 우리는 여분이 있어요. –