如何理解 Python 中 all() 函数中的取模?
How to understand the modulo in all() function in Python?
我知道Python中的模%
就是取余的意思,例如:
print 6 % 4 # 2, because 6 = 1 * 4 + 2
print 4 % 2 # 0, because 4 = 2 * 2 + 0
我也知道了all()
函数就像全称量化,returnTrue
如果所有的命题都是True
,它的参数应该是一个可移植的。
my_list = [True, True, True, True]
print all(my_list) # True
但是我仍然无法理解以下代码:
test_num = [3,6,9]
print all (11 % i for i in test_num) # True
for unknown in (11 % i for i in test_num):
print unknown, type(unknown) # 2 <type 'int'>
# 5 <type 'int'>
# 2 <type 'int'>
那么,为什么我可以从item都是整数的iterable中得到True值呢?
谢谢!
如果您在布尔上下文中使用整数(例如在条件中,或通过 bool
明确表示),returns 整数是否为非零:
>>> bool(0)
False
>>> bool(43)
True
那么让我们看一下代码:
(11 % i for i in test_num)
是一个展开到 11 % 3
、11 % 6
和 11 % 9
的生成器,它会变成 2
、5
,和 2
。由于它们都是非零的,all
returns True
.
实际上,这个 returns True
当且仅当 11 不能被 3、6 或 9 整除。
除 0 以外的任何值都被视为 true。由于 test_num
中没有 0,all(test_num)
将 return 为真。
试试这个:
>>> test_num = [2,3,0]
>>> print all(test_num)
False
将相同的逻辑应用到 for 循环中,您将得到答案。
你看过帮助(全部)了吗?
Help on built-in function all in module __builtin__:
all(...)
all(iterable) -> bool
Return True if bool(x) is True for all values x in the iterable.
If the iterable is empty, return True.
all() 处理布尔值,return 处理布尔值。所以你的整数被转换为布尔值,这意味着任何非零值 return True。因此,如果任何模数 return 0,您将得到 False,否则您将得到 True。
>>> print all([False,True])
False
>>> print all([True,False])
False
>>> print all([True,True])
True
我知道Python中的模%
就是取余的意思,例如:
print 6 % 4 # 2, because 6 = 1 * 4 + 2
print 4 % 2 # 0, because 4 = 2 * 2 + 0
我也知道了all()
函数就像全称量化,returnTrue
如果所有的命题都是True
,它的参数应该是一个可移植的。
my_list = [True, True, True, True]
print all(my_list) # True
但是我仍然无法理解以下代码:
test_num = [3,6,9]
print all (11 % i for i in test_num) # True
for unknown in (11 % i for i in test_num):
print unknown, type(unknown) # 2 <type 'int'>
# 5 <type 'int'>
# 2 <type 'int'>
那么,为什么我可以从item都是整数的iterable中得到True值呢?
谢谢!
如果您在布尔上下文中使用整数(例如在条件中,或通过 bool
明确表示),returns 整数是否为非零:
>>> bool(0)
False
>>> bool(43)
True
那么让我们看一下代码:
(11 % i for i in test_num)
是一个展开到 11 % 3
、11 % 6
和 11 % 9
的生成器,它会变成 2
、5
,和 2
。由于它们都是非零的,all
returns True
.
实际上,这个 returns True
当且仅当 11 不能被 3、6 或 9 整除。
除 0 以外的任何值都被视为 true。由于 test_num
中没有 0,all(test_num)
将 return 为真。
试试这个:
>>> test_num = [2,3,0]
>>> print all(test_num)
False
将相同的逻辑应用到 for 循环中,您将得到答案。
你看过帮助(全部)了吗?
Help on built-in function all in module __builtin__:
all(...)
all(iterable) -> bool
Return True if bool(x) is True for all values x in the iterable.
If the iterable is empty, return True.
all() 处理布尔值,return 处理布尔值。所以你的整数被转换为布尔值,这意味着任何非零值 return True。因此,如果任何模数 return 0,您将得到 False,否则您将得到 True。
>>> print all([False,True])
False
>>> print all([True,False])
False
>>> print all([True,True])
True