S.L*_*ott 9 python functional-programming generator hungarian-notation
大多数功能都很容易命名.通常,函数名称基于它的作用或它产生的结果类型.
但是,在生成器函数的情况下,结果可能是某种其他类型的可迭代结果.
def sometype( iterable ):
for x in iterable:
yield some_transformation( x )
Run Code Online (Sandbox Code Playgroud)
该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
Run Code Online (Sandbox Code Playgroud)
请问iter_,map_,reduce_,filter_前缀有助于澄清发电机功能的名称?还是只是视觉上的混乱?
如果前缀有用,您有什么前缀建议?
或者,如果后缀有用,您有什么后缀建议?
Python dicts有iter*方法.而lxml树也有一个iter方法.读
for node in doc.iter():
Run Code Online (Sandbox Code Playgroud)
看起来很熟悉,所以按照这种模式,我会考虑命名一个sometypes_iter
有点类型的生成器,这样我就可以写出来,
for item in sometypes_iter():
Run Code Online (Sandbox Code Playgroud)
Python提供了一个sorted功能.按照这种模式,我可能会使动词函数过去时:
sometypes_reduced
sometypes_mapped
sometypes_filtered
Run Code Online (Sandbox Code Playgroud)
如果你有足够的这些功能,它可能是有意义的做一个SomeTypes类,因此该方法的名称可以缩短到reduce,map和filter.
如果函数可以被推广为接受或返回类型以外的类型sometype,那么当然sometype从函数名称中删除是有意义的,而是选择一个强调它的功能而不是类型的名称.