대부분의 기능은 쉽게 이름을 지정할 수 있습니다. 일반적으로 함수 이름은 함수 또는 생성되는 결과의 유형을 기반으로합니다.Python Generator 함수 이름 - 접두어가 도움이됩니까?
그러나 생성기 함수의 경우 결과는 다른 유형에 비해 반복 가능할 수 있습니다. 함수가 지정된 형식의 개체를 반환하지 않기 때문에
def sometype(iterable):
for x in iterable:
yield some_transformation(x)
sometype
이름은 오해의 소지가 느낀다. 실제로는 sometype
이상의 iterable입니다.
iter_sometype
또는 gen_sometype
과 같은 이름은 Hungarian Notation과 너무 비슷합니다. 그러나 그것은 또한 기능의 의도를 분명히하는 것으로 보인다.
더 많은 특수화 된 사례가 있는데, 접두어가 도움이 될 수 있습니다. 이들은 대표적인 예이며 일부는 itertools에서 볼 수 있습니다. 그러나 우리는 종종 알고리즘 복잡성이있는 버전을 작성하여 을 itertools
과 비슷하게 만들지 만 완벽한 적합은 아닙니다.
def reduce_sometype(iterable):
summary = sometype()
for x in iterable:
if some_rule(x):
yield summary
summary= sometype()
summary.update(x)
def map_sometype(iterable):
for x in iterable:
yield some_complex_mapping(x)
def filter_sometype(iterable):
for x in iterable:
if some_complex_rule(x):
yield x
는 iter_
, map_
, reduce_
, filter_
접두사는 발전기 함수의 이름을 명확히 도움이됩니까? 아니면 시각적으로 혼란 스럽습니까?
접두어가 도움이된다면 어떤 접두사 접두사가 있습니까?
접미사가 도움이된다면 어떤 접미사 제안이 있습니까?
당신은 일반화 된 것 같아요. 대부분 제 2와 제 3의 함수를 제너레이터 식 ala'(iterable의 x에 대해 some_mapping (x))'로 직접 작성하는 것입니다. 첫 번째 것은 실제로'reduce '하지 않습니다. 맵핑과 비슷합니다. 각'x'에 새로운'sometype'이 있기 때문입니다. –
@ THC4k : 더 복잡하다고 상상해보십시오.'itertools'에서 너무 쉽게 복잡해졌습니다. 그렇게 복잡한 것이 아니기 때문에 기본 함수 프로그래밍 원칙을 위반합니다. 예를 들어, 최적화로 많은 예비 설정 작업이 필요할 수 있습니다. –