我想指出一个什么都不做的函数:
def identity(*args)
return args
Run Code Online (Sandbox Code Playgroud)
我的用例是这样的
try:
gettext.find(...)
...
_ = gettext.gettext
else:
_ = identity
Run Code Online (Sandbox Code Playgroud)
当然,我可以使用identity上面定义的,但内置肯定会运行得更快(并避免我自己引入的错误).
显然,map与filter使用None的身份,但这是具体到它们的实现.
>>> _=None
>>> _("hello")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
Run Code Online (Sandbox Code Playgroud) 这里的讨论提示
是否应将等效代码的行为视为定义的一部分,或者实现是否可以以非短路方式实现它们?
以下是cpython/Lib/test/test_builtin.py的相关摘录
def test_all(self):
self.assertEqual(all([2, 4, 6]), True)
self.assertEqual(all([2, None, 6]), False)
self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
self.assertRaises(RuntimeError, all, TestFailingIter())
self.assertRaises(TypeError, all, 10) # Non-iterable
self.assertRaises(TypeError, all) # No args
self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
self.assertEqual(all([]), True) # Empty iterator
S = [50, 60]
self.assertEqual(all(x > 42 for x in S), True)
S = [50, 40, 60]
self.assertEqual(all(x > 42 for x in S), False)
def test_any(self): …Run Code Online (Sandbox Code Playgroud)