Python內置函數介紹(下)
1. 迭代器相關函數
# iter() 和 next()
numbers = [1, 2, 3]
iterator = iter(numbers)
print(next(iterator)) # 1
print(next(iterator)) # 2
# zip() - 合併多個迭代器
names = ['小明', '小華', '小李']
scores = [90, 85, 95]
for name, score in zip(names, scores):
print(f"{name}: {score}分")
2. 高階函數
# map() - 映射函數
numbers = [1, 2, 3, 4, 5]
squares = map(lambda x: x**2, numbers)
print(list(squares)) # [1, 4, 9, 16, 25]
# filter() - 過濾函數
def is_even(n):
return n % 2 == 0
numbers = [1, 2, 3, 4, 5, 6]
evens = filter(is_even, numbers)
print(list(evens)) # [2, 4, 6]
# reduce() - 規約函數
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product) # 120
3. 對象和類相關函數
# dir() - 查看對象的所有屬性
print(dir("")) # 顯示字符串對象的所有方法
# hasattr(), getattr(), setattr()
class Person:
name = "小明"
p = Person()
print(hasattr(p, 'name')) # True
print(getattr(p, 'name')) # 小明
setattr(p, 'age', 20)
print(p.age) # 20
4. 內存和系統相關函數
# id() - 獲取對象的內存地址
x = [1, 2, 3]
print(id(x))
# hash() - 獲取對象的哈希值
print(hash("hello"))
# memoryview() - 內存視圖
v = memoryview(b"Hello")
print(v[0]) # 72 (ASCII code for 'H')
練習題
-
使用map()和filter()完成以下任務:
- 將列表中的溫度從攝氏轉換為華氏度
- 過濾出列表中的質數
-
使用reduce()計算階乘
常見錯誤和注意事項
- map()和filter()返回的是迭代器,需要轉換為列表才能多次使用
- reduce()函數需要從functools模組導入
- 使用next()時注意迭代器是否已經耗盡
- 在使用高階函數時注意性能影響