Python「內建函數」(built-in functions)就是不用 import,隨時可以直接呼叫的函數,像 print()、len()、range() 這些,都算。
all():全部為真才回傳 True
語法:
all(iterable)all() 會檢查可迭代物件中是否「全部」元素都為真(truthy)。全部為真才回傳 True;只要有一個為假就回傳 False。print(all([True, True, True])) # True(全部 True)
print(all([True, False, True])) # False(有一個 False)
print(all([1, 2, 3])) # True(全是真值)
print(all([1, 0, 3])) # False(0 是假值)
print(all([])) # True(空的,特殊!)搭配生成式
all() 最常搭配生成式使用,用來檢查是否所有元素都符合某個條件。
nums = [2, 4, 6, 8, 10]
# 是否全部都是偶數?
all_even = all(n % 2 == 0 for n in nums)
print(all_even) # True
# 是否全部都大於 0?
all_positive = all(n > 0 for n in nums)
print(all_positive) # True
# 是否全部都大於 5?
all_big = all(n > 5 for n in nums)
print(all_big) # False(2 和 4 不大於 5)any() vs all()
any() 和 all() 是一對互補的函數。any() 是「有一個就好」,all() 是「全部都要」。
nums = [2, 4, 5, 6, 8]
print(any(n % 2 == 1 for n in nums)) # True(5 是奇數)
print(all(n % 2 == 0 for n in nums)) # False(5 不是偶數)
# 記憶口訣:
# any() → 至少一個為真 → True
# all() → 全部都為真 → True
# 空的情況:
print(any([])) # False(沒有任何真值)
print(all([])) # True(沒有任何假值)all() 的短路特性
和 any() 一樣,all() 也有短路特性:一旦找到第一個假值,就立刻回傳 False,不會繼續檢查。
def check(n):
print(f' 檢查 {n}')
return n > 0
nums = [3, 5, -1, 7, 9]
result = all(check(n) for n in nums)
print(f'結果:{result}')
# 輸出:
# 檢查 3
# 檢查 5
# 檢查 -1 ← 找到假值,停止!
# 結果:False實用場景
all() 很適合做資料驗證、權限檢查等需要「全部通過」的場景。
# 檢查所有欄位都有填寫
form = {'name': 'Alice', 'email': 'a@b.com', 'phone': '0912345678'}
is_complete = all(form.values())
print(f'表單完整:{is_complete}') # True
# 檢查密碼是否符合所有規則
password = 'Abc12345'
rules = [
len(password) >= 8,
any(c.isupper() for c in password),
any(c.islower() for c in password),
any(c.isdigit() for c in password),
]
is_valid = all(rules)
print(f'密碼有效:{is_valid}') # True小小綜合例子
# 學生成績審核系統
students = {
'小明': {'國文': 75, '數學': 82, '英文': 68},
'小華': {'國文': 90, '數學': 88, '英文': 92},
'小美': {'國文': 60, '數學': 55, '英文': 70},
}
PASS_SCORE = 60
print('=== 成績審核 ===')
for name, scores in students.items():
# 是否全部及格?
all_pass = all(s >= PASS_SCORE for s in scores.values())
# 是否有任一科優秀(>=90)?
has_excellent = any(s >= 90 for s in scores.values())
# 平均分
avg = sum(scores.values()) / len(scores)
status = '✓ 全部及格' if all_pass else '✗ 有不及格'
excellent = ' ★ 有優秀科目' if has_excellent else ''
print(f'{name}:平均 {avg:.1f} → {status}{excellent}')
if not all_pass:
failed = [k for k, v in scores.items() if v < PASS_SCORE]
print(f' 不及格科目:{failed}')
# === 成績審核 ===
# 小明:平均 75.0 → ✓ 全部及格
# 小華:平均 90.0 → ✓ 全部及格 ★ 有優秀科目
# 小美:平均 61.7 → ✗ 有不及格
# 不及格科目:['數學']