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()이라는 새로운 내장 함수를 추가할 것을 제안합니다.

근거

파이썬에서 아무 일도 하지 않는 함수를 구현하는 것은 사소한 일입니다. 사실 너무 쉬워서 많은 사람들이 이를 몇 번이고 반복해서 작성합니다. 아무 일도 하지 않는 공통 내장 함수가 있으면 많은 경우에 유용할 것입니다.

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

$ setenv PYTHONBREAKPOINT=noop

구현

noop() 함수에 해당하는 파이썬 코드는 정확히 다음과 같습니다:

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

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

거부된 대안

noop()이 무언가를 반환함

YAGNI.

이는 의미론을 복잡하게 만들기 때문에 거부됩니다. 예를 들어, 항상 *args**kws를 모두 반환한다면, 둘 다 주어지지 않았을 때는 무엇을 반환해야 합니까? ((), {})라는 튜플을 반환하는 것은 다소 보기 흉하지만 일관성을 제공합니다. 하지만 그것이 개념적으로 함수에 전달된 것이기도 하므로 그냥 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을 사용하는 것이 더 빠를 것이라는 점입니다. 콜백을 호출해 아무 쓸모 없는 일을 하게 만드는 대신, 알고리즘이 콜백을 완전히 건너뛸 수 있게 해주기 때문입니다.

참고 문헌