返回生成器的函数的名称

时间:2012-01-27 19:56:29

标签: python naming-conventions

如何命名返回生成器的函数(即使用yield foo而不是return foo)?

  • 绝对不是getFoo(),因为它不会返回Foo的值。
  • 可能不是foos(),因为我宁愿有一个易于区分的前缀。
  • 可能不完全是listFoo(),因为它不会返回list
  • 可能不是iterateFoo(),因为这个前缀太长了。

您最喜欢的解决方案是什么?

更新

虽然在某些情况下foos()可能是一个非常好的解决方案,但请注意方法名称如何以动词开头。动词传达了这是一种方法而不是数据字段的想法,因此有助于提高可读性。如果可能的话,我更喜欢一种解决方案,可以很容易地从数据字段中告诉方法。

5 个答案:

答案 0 :(得分:17)

我认为foofoos是可能性。或者,为了模仿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个字符)