![]() |
1
7
这是一件非常特殊的事情,而且常常是非常糟糕的事情。这是可以避免的。 也就是说,调用这个函数时传递[foo]而不是foo。 唯一可以证明这一点的时候是:(1)您已经安装了一个需要一种形式(iterable或singleton)的软件库;(2)您必须扩展它以支持另一个用例。所以。你 只有 展开具有现有代码基的现有函数时,请执行此操作。 如果这是新的开发,不要这样做。
只有两个?]
什么?你是说你没有提供其他文件,也没有其他培训?没有支持?没有建议?谁是“不习惯的人”?和他们谈谈。不要假设或想象他们的事情。 另外,不要使用前导大写名称。
可怕的。从未。做。这个。 我在Python库中查找了一些示例。大多数这样做的函数都有简单的描述。 http://docs.python.org/library/functions.html#isinstance IsInstance(对象,ClassInfo) 他们称之为“classinfo”,它可以是类或类的元组。 你也可以这样做。 你 必须 考虑常见的用例和异常。遵循80/20规则。
|
![]() |
2
4
我想我参加聚会有点晚了,但我很惊讶没有人建议我做装饰。
我在亚历克斯·马泰利的一个帖子里看到了类似的模式,但我记不清这个链接是什么。 |
![]() |
3
3
听起来你在为代码的丑陋而苦恼,比如:
我的建议是避免重载接口来处理两个不同的情况。我倾向于编写有利于方法重用和清晰命名的代码,而不是巧妙地动态使用参数:
通常,我从这个简单的模式开始,但当有效率获得补偿额外代码复杂性和部分功能复制的效果时,我就有机会优化“多”情况。如果这个约定看起来过于冗长,可以选择“processwidget”和“processwidgets”这样的名称,尽管两者之间的区别是一个容易丢失的字符。 |
![]() |
4
2
您可以使用*args magic(varargs)使您的参数始终是不可更改的。 将单个项或多个已知项作为普通函数参数传递,如 func(arg1,arg2,…) 并且传递前面带星号的可ITerable参数,例如 FUNC(*ARGS) 例子:
|
![]() |
5
1
你能用一种非常高级的方式命名你的参数吗?阅读代码的人更感兴趣的是了解参数代表什么(“客户机”),而不是他们的类型(“元组列表”);类型可以在函数文档字符串中定义,这是一件好事,因为它将来可能会改变(类型有时是实现细节)。 |
![]() |
6
0
我会用一个名称来解释参数可以是一个实例或实例列表。说
|
![]() |
7
0
我会做一件事,
所以你不必再担心它的名字了。 在一个函数中,您应该尝试实现一个操作,接受相同的参数类型并返回相同的类型。 您可以有两个函数,而不是用ifs填充函数。 |
![]() |
8
0
因为您不关心得到的是什么样的iterable,所以可以尝试使用iter()为参数获取迭代器。如果iter()引发了typeerror异常,则该参数不可iterable,因此您将创建一个iterable和bob叔叔的列表或元组。
这种方法的唯一问题是foo是否是字符串。字符串是不可重复的,因此传入单个字符串而不是字符串列表将导致对字符串中的字符进行迭代。如果这是一个问题,您可以为它添加一个if测试。在这一点上,样板代码变得越来越冗长,所以我将把它分解成它自己的函数。
与某些回答不同,我喜欢这样做,因为它消除了调用方在使用API时可能会出错的一件事。”对自己创造的东西要保守,对自己接受的东西要宽容。” 为了回答你最初的问题,即你应该给参数命名,我仍然会使用“foos”,即使你只接受一个项目,因为 意图 是接受一个列表。如果它不是无可辩驳的,那就是 技术上 一个错误,尽管您将为调用者纠正一个错误,因为处理一个项目可能是他们想要的。另外,如果来电者 认为 他们必须传递一个甚至是一个项目的不可重复的信息,好吧,那当然会很好地工作,而且只需要很少的语法,那么为什么还要担心纠正他们的误解呢? |
![]() |
9
-1
我正在做一个相当大的项目,我们在传递地图,并调用参数
我想说的是,你不应该把它命名为它是什么,而应该把它命名为它的用途。另外,请注意,不能调用use
|