如何命名返回生成器的函数(即使用yield foo
而不是return foo
)?
getFoo()
,因为它不会返回Foo的值。foos()
,因为我宁愿有一个易于区分的前缀。listFoo()
,因为它不会返回list
。iterateFoo()
,因为这个前缀太长了。您最喜欢的解决方案是什么?
更新
虽然在某些情况下foos()
可能是一个非常好的解决方案,但请注意方法名称如何以动词开头。动词传达了这是一种方法而不是数据字段的想法,因此有助于提高可读性。如果可能的话,我更喜欢一种解决方案,可以很容易地从数据字段中告诉方法。
答案 0 :(得分:17)
我认为foo
或foos
是可能性。或者,为了模仿Python2 dicts'iteritems
,您可以使用iterfoo
。
答案 1 :(得分:7)
虽然最好使用有用的名称来表明事情的作用,但我认为根本不需要使用Hungarian notation来表示函数的返回类型。
返回类型应该记录在注释或文档字符串中,但我建议像foos()
,getfoos()
或get_foos()
这样的名称最适合。
如果你确实希望显然这是一个生成器,我会建议iterfoos()
与Python 2的dict方法(如itervalues()
)的相似性。
请记住,许多用于返回列表的内置函数现在都是Python 3中的生成器(map()
,dict.values()
等),因此当您的函数返回时,任何人都不应该感到惊讶即使您没有将其称为generate_foos()
或其他变体,序列也是生成器。
答案 2 :(得分:4)
最准确的是:
iterateFoo()
iterate_foo()
iter_foo()
iterFoo()
你具体说明了这个功能是什么,同时非常清楚为什么要使用它。
答案 3 :(得分:1)
一些简洁的建议:
getFoos()
generateFoos()
yieldFoos()
allFoos()
由于您通常不需要生成器来获取所有的foos,因此生成器的特定功能通常会建议一个更有趣的名称:
getActiveFoos()
getGreenFoos()
getFoosMatchingCriteria(someCriteria)
getFoosOverTheNetworkIfTheDatabaseIsntBeingAJerkface()
答案 4 :(得分:0)
genFoo()
(......以及一些额外的词语确保此解决方案至少包含30个字符)