为什么并非所有()都停止在第一个False元素上?

Jac*_*ing 4 python

文档中,all相当于:

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True
Run Code Online (Sandbox Code Playgroud)

那为什么我得到这个输出:

# expecting: False

$ python -c "print( all( (isinstance('foo', int), int('foo')) ) )"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'foo'
Run Code Online (Sandbox Code Playgroud)

什么时候:

# expecting: False

$ python -c "print( isinstance('foo', int) )"
False
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 7

获得所需行为的一种(相当丑陋)方式是通过lambdas:

all(f() for f in (lambda: isinstance('foo', int), lambda: int('foo')))
Run Code Online (Sandbox Code Playgroud)


Kar*_*ath 5

在调用函数之前评估参数.在这种情况下,首先必须创建传递给的元组all.

all 从来没有机会检查过它们,之前就抛出了异常.

>>> int('foo')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'foo'
Run Code Online (Sandbox Code Playgroud)

  • `cond1或cond2或cond3`.但是你发布的内容还有别处.*困惑*. (3认同)