Python生成器函数名称 - 前缀有用吗?

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_sometypegen_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_前缀有助于澄清发电机功能的名称?还是只是视觉上的混乱?

如果前缀有用,您有什么前缀建议?

或者,如果后缀有用,您有什么后缀建议?

unu*_*tbu 7

Python dictsiter*方法.而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,mapfilter.

如果函数可以被推广为接受或返回类型以外的类型sometype,那么当然sometype从函数名称中删除是有意义的,而是选择一个强调它的功能而不是类型的名称.