相关疑难解决方法(0)

python中是否有内置的身份函数?

我想指出一个什么都不做的函数:

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上面定义的,但内置肯定会运行得更快(并避免我自己引入的错误)​​.

显然,mapfilter使用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)

python python-2.7 python-3.x

132
推荐指数
6
解决办法
4万
查看次数

Python的任何/所有显式的短路行为是什么?

这里的讨论提示

文档建议为的行为的一些等价代码allany

是否应将等效代码的行为视为定义的一部分,或者实现是否可以以非短路方式实现它们?

以下是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)

python short-circuiting language-specifications

36
推荐指数
3
解决办法
4867
查看次数