dav*_*off 54 python coding-style python-3.x
我们有一个返回城市/州元组的对象方法,即('Boston', 'MA').在某些有效情况下,没有有效的城市/州返回.在风格上,返回更有意义None,还是(None, None)在这种情况下包含两元素元组?
Fel*_*ing 57
我会回来的None.如果没有结果,为什么要返回看起来像结果的东西?
它也更容易测试:
result = getCity()
if result:
# do something
Run Code Online (Sandbox Code Playgroud)
(None, None)如果可能只有两个值中的一个是None(即('Boston', None)),我只会返回.在这种情况下会更加一致.
Fré*_*idi 44
通过在特殊情况下仅返回一个值,您可能会破坏元组解包成语.您的一些来电者可能会发出:
city, state = getCityStateTuple("something")
Run Code Online (Sandbox Code Playgroud)
在这种情况下,返回None将使错误中断调用者:
TypeError: 'NoneType' object is not iterable
所以,我个人会(None, None)在你的情况下回来.然后,您的里程可能会有所不同,这取决于您的来电者使用的模式.
kin*_*all 11
正如其他人所指出的那样,其中包含项目的元组不会测试False,这是您可能想要返回None而不是返回的一个原因(None, None).但是,有可能编写一个元组子类,False即使它在其中包含项目时也会通过重写其__nonzero__()方法进行测试.
class falsetuple(tuple):
def __nonzero__(self):
return False
Run Code Online (Sandbox Code Playgroud)
然后,falsetuple((None, None))当没有可用值时,您可以返回.事实上,你总是可以返回相同的 falsetuple.
我并不建议您这样做,其实我对这个嘲弄约定,我只是说,非空元组的感实性不一定本身就是一个理由不返回一个元组严重疑虑.
如果你的例程通常返回一个元组,那么元组就应该继续返回.真正的选择是在返回(None, None)或提出异常之间,而我们没有足够的信息来提供有关这方面的好建议.
如果是我,并且我选择了异常的元组,我会使用FalseTuple那个有点建议,并且还意识到调用代码(使用元组解包)也可以测试
if city is None:
Run Code Online (Sandbox Code Playgroud)
看看是否获得了有效的结果.这样你就可以支持所有可能返回值的元组提取,并且仍然允许使用pythonic成语来询问对象,"你评价为真吗?" (这完全符合以下情况):
class FalseTuple(tuple):
def __nonzero__(self):
return False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3840 次 |
| 最近记录: |