Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

PEP 559 – 내장 noop()

Author:
Barry Warsaw <barry at python.org>
Status:
Rejected
Type:
Standards Track
Created:
08-Sep-2017
Python-Version:
3.7
Post-History:
09-Sep-2017
Resolution:
Python-Dev message

Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

초록

이 PEP는 None을 반환하는 것 외에는 아무 일도 하지 않는 noop()이라는 새 내장 함수를 추가할 것을 제안합니다.

근거

Python에서 아무것도 하지 않는(no-op) 함수를 구현하는 것은 아주 간단합니다. 사실 너무 쉬워서 많은 사람이 이를 몇 번이고 반복해서 작성합니다. 아무 일도 하지 않는 공통 내장 함수가 있으면 많은 경우에 유용할 것입니다.

한 가지 사용 사례는 PEP 553으로, breakpoint 환경 변수를 다음과 같이 설정하면 이를 사실상 비활성화할 수 있습니다:

$ setenv PYTHONBREAKPOINT=noop

구현

noop() 함수와 동등한 Python 코드는 정확히 다음과 같습니다.:

def noop(*args, **kws):
    return None

C 내장 구현은 풀 리퀘스트 [1]로 제공됩니다.

기각된 대안

noop()이 무언가를 반환하는 방안

YAGNI.

이 방안은 의미를 복잡하게 만들기 때문에 거부되었습니다. 예를 들어 항상 *args와 **kws를 모두 반환한다면, 둘 다 주어지지 않았을 때는 무엇을 반환해야 합니까? ((), {}) 튜플을 반환하는 것은 다소 보기 좋지 않지만 일관성은 있습니다. 하지만 개념적으로 함수에 전달된 것 역시 None이므로 그냥 None을 반환하고 싶을 수도 있습니다.

또는 noop(7)처럼 위치 인자를 정확히 하나만 전달하면 어떻게 됩니까? 7을 반환합니까, 아니면 ((7,), {})를 반환합니까? 이런 식으로 계속됩니다.

저자는 noop()의 반환값이 필요할 일은 결코 없을 것이라고 주장하며, 따라서 이 함수는 항상 None을 반환합니다.

Coghlan과의 대화(서식에 맞게 편집함):

이에 대한 제 반론은 map(noop, iterable), sorted(iterable, key=noop) 같은 경우입니다(filter, max, min 모두 인자 하나를 받는 호출 가능 객체를 받으며, 여러 itertools 연산도 마찬가지입니다).

그런 경우에 noop()을 유용한 기본 함수로 만들려면 정의를 다음과 같이 하기만 하면 됩니다:

def noop(*args, **kwds):
    return args[0] if args else None

그 반론에 대한 재반론은, 이 모든 경우에 None을 기본값으로 사용하는 편이 더 빠르다는 것입니다. 콜백을 호출해서 아무 쓸모 없는 일을 하게 하는 대신, 알고리즘이 콜백을 아예 건너뛸 수 있기 때문입니다.

참고 문헌