大多数函数都很容易命名。通常,函数名称基于其执行的操作或产生的结果类型。
然而,在生成器函数的情况下,结果可能是另一种类型的可迭代对象。
然而,在生成器函数的情况下,结果可能是另一种类型的可迭代对象。
def sometype( iterable ):
for x in iterable:
yield some_transformation( x )
< p > sometype
这个名称让人感到误导,因为该函数不返回命名类型的对象。实际上,它是 sometype
上的可迭代对象。
像 iter_sometype
或 gen_sometype
这样的名称有点像 匈牙利命名法。然而,它似乎也澄清了函数的意图。
进一步地,有许多更专业的情况,其中前缀可能会有所帮助。这些都是典型的例子,其中一些在 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_
是否有助于澄清生成器函数的名称?还是只是视觉上的杂乱无章?
如果前缀有帮助,您有什么前缀建议?
或者,如果后缀有帮助,您有什么后缀建议?
(some_mapping(x) for x in iterable)
。第一个函数并没有真正地reduce
任何东西,它更像是一种映射,因为每个x
都有一个新的sometype
。 - Jochen Ritzel