采用单个对象或可迭代的Python函数中的参数名称

Bjö*_*lex 8 python naming-conventions

我的代码中有一些函数接受一个对象或一个可迭代的对象作为输入.我被教导要为所有事情使用有意义的名字,但我不确定如何遵守这里.我应该将一个参数称为sinlge对象或可迭代对象?我提出了两个想法,但我不喜欢其中任何一个:

  1. FooOrManyFoos - 这表达了正在发生的事情,但我可以想象一个不习惯它的人可能无法立即理解它意味着什么
  2. param - 一些通用名称.这清楚地表明它可以是几件事,但没有解释参数的用途.

通常我将对象的迭代称为我称之为单个对象的复数.我知道这可能看起来有点强迫,但Python应该是(其中包括)可读性.

S.L*_*ott 7

我的代码中有一些函数接受一个对象或一个可迭代的对象作为输入.

这是一个非常特殊的,往往是非常糟糕的事情.这是可以避免的.

即,在调用此函数时传递[foo]而不是foo.

唯一可以证明这样做的时候是(1)你有一个软件的安装基础,它需要一个表单(可迭代或单例)和(2)你必须扩展它以支持另一个用例.所以.您扩大现有功能有一个现有的代码库时,做到这一点.

如果这是新开发,请不要这样做.

我提出了两个想法,但我不喜欢其中任何一个:

[只有两个?]

FooOrManyFoos - 这表示发生了什么,但我可以想象一个不习惯它的人可能无法立即理解它意味着什么

什么?你是说你没有提供其他文件,也没有其他培训?没有支持?没有建议?谁是"不习惯的人"?与他们交谈.不要假设或想象他们的事情.

另外,请勿使用Leading Upper Case Names.

param - 一些通用名称.这清楚地表明它可以是几件事,但没有解释参数的用途.

可怕.决不.做.这个.

我查看了Python库中的示例.执行此操作的大多数功能都有简单的描述.

http://docs.python.org/library/functions.html#isinstance

isinstance(object,classinfo)

他们称之为"classinfo",它可以是类或类的元组.

你也可以这样做.

必须考虑常见用例和例外情况.遵循80/20规则.

  1. 80%的情况下,您可以用迭代替换它,而不是有这个问题.

  2. 在剩下的20%的情况下,您有一个基于假设(可迭代或单个项目)构建的软件安装基础,您需要添加另一个案例.不要更改名称,只需更改文档即可.如果它曾经说过"foo"它仍然会说"foo",但是你让它接受了一个"foo"的迭代,而不对参数做任何改动.如果它曾经说"foo_list"或"foo_iter",那么它仍然会说"foo_list"或"foo_iter",但它会悄悄地容忍一个单身而不会破坏.

    • 80%的代码是遗留代码("foo"或"foo_list")

    • 20%的代码是新功能("foo"可以是可迭代的,或者"foo_list"可以是单个对象.)