2012-01-27 68 views
16

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

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

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

更新:

虽然foos()可能在某些情况下完全很好的解决方案,注意方法的名称如何往往一开始就有一个动词。这个动词表达了这样一种想法:这是一种方法,而不是数据领域,因此有助于可读性。如果可能的话,我更喜欢一个解决方案,它可以很容易地从数据字段中告诉方法。

+4

谁说前缀是好事? “foos”不完全清晰? – delnan 2012-01-27 19:58:39

+0

一个想法:genFoo() – sgallen 2012-01-27 20:00:31

+0

我与@delnan在这一个。 “foos”听起来不错。你如何命名一个可迭代的(例如一个列表)? – zrxq 2012-01-27 20:04:15

回答

2

一些简短的建议:

getFoos() 
generateFoos() 
yieldFoos() 
allFoos() 

既然你通常不需要一个发电机只是让你所有的foos,发电机的特定功能很常见的建议一个更有趣的名字:

getActiveFoos() 
getGreenFoos() 
getFoosMatchingCriteria(someCriteria) 
getFoosOverTheNetworkIfTheDatabaseIsntBeingAJerkface() 
+0

...但软件工程的核心原则之一是数据库是**总是**是一个曲面......;) – 2012-01-27 22:34:20

+4

Camelcase可能不被认为符合PEP8(据我所见,PEP8并不明确关于发电机)。 – 2016-07-12 22:13:34

0

genFoo()

(...和一些额外的话确保该解决方案具有至少30个字符)

14

我认为foofoos是可能性。或者,要模仿Python2字典'iteritems,您可以使用iterfoo

4

尽管最好使用有用的名称来指示做什么,但我认为完全没必要使用Hungarian notation来指示函数的返回类型。

返回类型也许应该在注释或文档字符串进行记录,但我会建议像foos()getfoos(),或get_foos()将是最适合的名字。

如果您确实希望这是一个生成器,那么我建议您使用iterfoos()与Python 2的dict方法(如itervalues())相似。请注意,许多用于返回列表的内置函数现在是Python 3中的生成器(map(),dict.values()等),所以当您的返回序列的函数是生成器时,任何人都不应该感到惊讶,即使您没有称之为generate_foos()或其他一些变化。

3

最准确的是:

iterateFoo() 
iterate_foo() 
iter_foo() 
iterFoo() 

你说,同时很清楚,为什么你会使用它的功能做具体是什么。