告別冗余代碼!這 20 個(gè) Python 內(nèi)置函數(shù)讓你的編程更優(yōu)雅高效
Python自帶許多內(nèi)置函數(shù),這些函數(shù)無(wú)需導(dǎo)入任何模塊即可直接使用,極大地提高了開(kāi)發(fā)效率。掌握這些常用內(nèi)置函數(shù)是精通 Python 的基礎(chǔ)。本文將詳細(xì)介紹 20 個(gè)在日常編程中極為常用的 Python 內(nèi)置函數(shù)。
1. print()
將指定對(duì)象輸出到標(biāo)準(zhǔn)輸出設(shè)備(通常是控制臺(tái))。這是調(diào)試和顯示信息最常用的函數(shù)。
name = "Alice"
age = 30
print("Hello, world!") # 輸出字符串
print("Name:", name, "Age:", age) # 輸出多個(gè)對(duì)象,默認(rèn)以空格分隔
print(f"User {name} is {age} years old.") # 使用 f-string 格式化輸出
print("第一行", end=" | ") # 自定義行尾結(jié)束符
print("第二行") # 默認(rèn) end='\n' (換行)
print() 可以接受一個(gè)或多個(gè)參數(shù),并將它們轉(zhuǎn)換成字符串后輸出。sep 參數(shù)控制分隔符(默認(rèn)空格),end 參數(shù)控制行尾符(默認(rèn)換行)。
2. input()
從標(biāo)準(zhǔn)輸入(通常是鍵盤(pán))讀取一行文本,并將其作為字符串返回(末尾的換行符會(huì)被剝離)。
user_name = input("請(qǐng)輸入您的名字: ")
user_age_str = input("請(qǐng)輸入您的年齡: ")
print(f"您好, {user_name}! 您輸入的年齡是: {user_age_str}")
print(f"名字的數(shù)據(jù)類(lèi)型: {type(user_name)}") # 輸出: <class 'str'>
print(f"年齡的數(shù)據(jù)類(lèi)型: {type(user_age_str)}") # 輸出: <class 'str'>
input() 會(huì)暫停程序執(zhí)行,等待用戶輸入。無(wú)論用戶輸入什么,input() 總是返回一個(gè)字符串。如果需要數(shù)字,需要后續(xù)使用 int() 或 float() 進(jìn)行轉(zhuǎn)換。
3. len()
返回對(duì)象的“長(zhǎng)度”(其中包含的項(xiàng)數(shù))。適用于序列(如字符串、列表、元組)和集合(如字典、集合)。
my_string = "Python"
my_list = [1, 2, 3, 4, 5]
my_dict = {'a': 1, 'b': 2}
print(f"字符串 '{my_string}' 的長(zhǎng)度: {len(my_string)}") # 輸出: 6
print(f"列表 my_list 的長(zhǎng)度: {len(my_list)}") # 輸出: 5
print(f"字典 my_dict 的鍵值對(duì)數(shù)量: {len(my_dict)}") # 輸出: 2
len() 是獲取容器或序列大小的基本方法。
4. type()
返回對(duì)象的類(lèi)型(類(lèi))。對(duì)于調(diào)試和理解代碼中變量的性質(zhì)非常有用。
x = 10
y = 3.14
z = "hello"
l = [1, 2]
print(f"變量 x 的類(lèi)型是: {type(x)}") # 輸出: <class 'int'>
print(f"變量 y 的類(lèi)型是: {type(y)}") # 輸出: <class 'float'>
print(f"變量 z 的類(lèi)型是: {type(z)}") # 輸出: <class 'str'>
print(f"變量 l 的類(lèi)型是: {type(l)}") # 輸出: <class 'list'>
type() 返回對(duì)象的類(lèi)對(duì)象,可以據(jù)此判斷變量屬于哪種數(shù)據(jù)類(lèi)型。
5. int()
將一個(gè)數(shù)字或字符串轉(zhuǎn)換為整數(shù)。如果字符串不能表示一個(gè)有效的整數(shù),會(huì)引發(fā) ValueError。
float_num = 9.8
str_num = "123"
str_invalid = "abc"
print(f"{float_num} 轉(zhuǎn)換為整數(shù): {int(float_num)}") # 輸出: 9 (向零取整)
print(f"字符串 '{str_num}' 轉(zhuǎn)換為整數(shù): {int(str_num)}") # 輸出: 123
try:
int(str_invalid)
except ValueError as e:
print(f"轉(zhuǎn)換 '{str_invalid}' 失敗: {e}") # 輸出: invalid literal for int() with base 10: 'abc'
# 也可以指定基數(shù)進(jìn)行轉(zhuǎn)換 (例如二進(jìn)制)
binary_str = "1011"
print(f"二進(jìn)制字符串 '{binary_str}' 轉(zhuǎn)換為十進(jìn)制整數(shù): {int(binary_str, 2)}") # 輸出: 11
int() 常用于處理用戶輸入或文件讀取的字符串?dāng)?shù)據(jù),將其轉(zhuǎn)換為可進(jìn)行數(shù)學(xué)運(yùn)算的整數(shù)。
6. float()
將一個(gè)數(shù)字或字符串轉(zhuǎn)換為浮點(diǎn)數(shù)。如果字符串不能表示一個(gè)有效的數(shù)字,會(huì)引發(fā) ValueError。
int_num = 100
str_num = "3.14159"
str_int = "42"
str_invalid = "pi"
print(f"{int_num} 轉(zhuǎn)換為浮點(diǎn)數(shù): {float(int_num)}") # 輸出: 100.0
print(f"字符串 '{str_num}' 轉(zhuǎn)換為浮點(diǎn)數(shù): {float(str_num)}") # 輸出: 3.14159
print(f"字符串 '{str_int}' 轉(zhuǎn)換為浮點(diǎn)數(shù): {float(str_int)}") # 輸出: 42.0
try:
float(str_invalid)
except ValueError as e:
print(f"轉(zhuǎn)換 '{str_invalid}' 失敗: {e}") # 輸出: could not convert string to float: 'pi'
float() 用于需要小數(shù)精度計(jì)算的場(chǎng)景,同樣常用于轉(zhuǎn)換輸入數(shù)據(jù)。
7. str()
將對(duì)象轉(zhuǎn)換為其字符串表示形式。幾乎所有 Python 對(duì)象都可以被 str() 轉(zhuǎn)換。
number = 42
pi = 3.14
my_list = [1, 'a', True]
is_valid = False
print(f"整數(shù) {number} 轉(zhuǎn)為字符串: '{str(number)}'") # 輸出: '42'
print(f"浮點(diǎn)數(shù) {pi} 轉(zhuǎn)為字符串: '{str(pi)}'") # 輸出: '3.14'
print(f"列表 {my_list} 轉(zhuǎn)為字符串: '{str(my_list)}'") # 輸出: '[1, 'a', True]'
print(f"布爾值 {is_valid} 轉(zhuǎn)為字符串: '{str(is_valid)}'") # 輸出: 'False'
str() 在需要將非字符串?dāng)?shù)據(jù)(如數(shù)字、列表)嵌入到字符串中(尤其是在舊式 % 格式化或 + 拼接時(shí))或?qū)懭胛募r(shí)非常有用。
8. list()
將一個(gè)可迭代對(duì)象(如字符串、元組、集合、字典的鍵/值/項(xiàng))轉(zhuǎn)換為列表。也可以創(chuàng)建一個(gè)空列表。
my_string = "abc"
my_tuple = (10, 20, 30)
my_set = {1, 2, 3}
my_dict = {'x': 1, 'y': 2}
print(f"字符串 '{my_string}' 轉(zhuǎn)為列表: {list(my_string)}") # 輸出: ['a', 'b', 'c']
print(f"元組 {my_tuple} 轉(zhuǎn)為列表: {list(my_tuple)}") # 輸出: [10, 20, 30]
print(f"集合 {my_set} 轉(zhuǎn)為列表: {list(my_set)}") # 輸出: [1, 2, 3] (順序可能變化)
print(f"字典的鍵轉(zhuǎn)為列表: {list(my_dict)}") # 輸出: ['x', 'y'] (Python 3.7+ 保證順序)
print(f"字典的值轉(zhuǎn)為列表: {list(my_dict.values())}") # 輸出: [1, 2]
print(f"字典的項(xiàng)轉(zhuǎn)為列表: {list(my_dict.items())}") # 輸出: [('x', 1), ('y', 2)]
print(f"創(chuàng)建一個(gè)空列表: {list()}") # 輸出: []
list() 是創(chuàng)建新列表或從其他可迭代類(lèi)型復(fù)制/轉(zhuǎn)換元素到列表的常用方法。列表是可變的,因此轉(zhuǎn)換后可以修改。
9. tuple()
將一個(gè)可迭代對(duì)象轉(zhuǎn)換為元組。元組是不可變的序列。
my_string = "xyz"
my_list = [4, 5, 6]
print(f"字符串 '{my_string}' 轉(zhuǎn)為元組: {tuple(my_string)}") # 輸出: ('x', 'y', 'z')
print(f"列表 {my_list} 轉(zhuǎn)為元組: {tuple(my_list)}") # 輸出: (4, 5, 6)
print(f"創(chuàng)建一個(gè)空元組: {tuple()}") # 輸出: ()
tuple() 用于需要不可變序列的場(chǎng)景,或者希望將可迭代對(duì)象轉(zhuǎn)換為元組形式。
10. dict()
創(chuàng)建 一個(gè)新的字典??梢酝ㄟ^(guò)關(guān)鍵字參數(shù)、映射對(duì)象或鍵值對(duì)的可迭代對(duì)象來(lái)初始化。
# 創(chuàng)建空字典
empty_dict = dict()
print(f"空字典: {empty_dict}") # 輸出: {}
# 使用關(guān)鍵字參數(shù)創(chuàng)建
kw_dict = dict(name="Bob", age=25, city="Paris")
print(f"關(guān)鍵字參數(shù)創(chuàng)建: {kw_dict}") # 輸出: {'name': 'Bob', 'age': 25, 'city': 'Paris'}
# 從鍵值對(duì)列表創(chuàng)建
pairs = [('a', 1), ('b', 2), ('c', 3)]
pairs_dict = dict(pairs)
print(f"鍵值對(duì)列表創(chuàng)建: {pairs_dict}") # 輸出: {'a': 1, 'b': 2, 'c': 3}
# 從另一個(gè)字典創(chuàng)建 (淺拷貝)
copy_dict = dict(kw_dict)
print(f"從字典拷貝創(chuàng)建: {copy_dict}")
dict() 是創(chuàng)建和初始化字典的靈活方式,比 {} 字面量提供了更多選項(xiàng)。
11. set()
創(chuàng)建一個(gè)新的集合。集合是無(wú)序的、不包含重復(fù)元素的集合。可以從可迭代對(duì)象創(chuàng)建。
my_string = "programming"
my_list = [1, 2, 2, 3, 1, 4]
print(f"從字符串創(chuàng)建集合: {set(my_string)}") # 輸出: {'r', 'o', 'g', 'a', 'm', 'i', 'n', 'p'} (順序不定)
print(f"從列表創(chuàng)建集合: {set(my_list)}") # 輸出: {1, 2, 3, 4} (去重)
print(f"創(chuàng)建空集合: {set()}") # 輸出: set()
set() 主要用于去重和執(zhí)行數(shù)學(xué)上的集合運(yùn)算(如并集、交集、差集)。
12. abs()
返回?cái)?shù)字的絕對(duì)值(其大小,不考慮符號(hào))。
positive_num = 10
negative_num = -5.5
zero = 0
print(f"{positive_num} 的絕對(duì)值: {abs(positive_num)}") # 輸出: 10
print(f"{negative_num} 的絕對(duì)值: {abs(negative_num)}") # 輸出: 5.5
print(f"{zero} 的絕對(duì)值: {abs(zero)}") # 輸出: 0
abs() 在數(shù)學(xué)計(jì)算和需要忽略數(shù)值符號(hào)的場(chǎng)景中使用。
13. max()
返回可迭代對(duì)象中最大的項(xiàng),或者返回兩個(gè)或多個(gè)參數(shù)中最大的一個(gè)。
numbers = [3, 1, 4, 1, 5, 9, 2]
strings = ["apple", "banana", "cherry"]
print(f"列表 {numbers} 中的最大值: {max(numbers)}") # 輸出: 9
print(f"字符串列表 {strings} 中的最大值 (字典序): {max(strings)}") # 輸出: 'cherry'
print(f"參數(shù) 10, 25, 18 中的最大值: {max(10, 25, 18)}") # 輸出: 25
# 可以提供 key 函數(shù)進(jìn)行自定義比較
words = ["go", "pyth?n", "is", "fun"]
print(f"按長(zhǎng)度比較的最大單詞: {max(words, key=len)}") # 輸出: 'pyth?n' (長(zhǎng)度為6)
max() 對(duì)于尋找序列極值非常方便。key 參數(shù)允許基于元素的某個(gè)屬性或計(jì)算結(jié)果來(lái)比較。
14. min()
返回可迭代對(duì)象中最小的項(xiàng),或者返回兩個(gè)或多個(gè)參數(shù)中最小的一個(gè)。用法與 max() 類(lèi)似。
numbers = [3, 1, 4, 1, 5, 9, 2]
strings = ["apple", "banana", "cherry"]
print(f"列表 {numbers} 中的最小值: {min(numbers)}") # 輸出: 1
print(f"字符串列表 {strings} 中的最小值 (字典序): {min(strings)}") # 輸出: 'apple'
print(f"參數(shù) 10, 25, 18 中的最小值: {min(10, 25, 18)}") # 輸出: 10
# 使用 key 函數(shù)
words = ["go", "pyth?n", "is", "fun"]
print(f"按長(zhǎng)度比較的最小單詞: {min(words, key=len)}") # 輸出: 'go' (或 'is', 長(zhǎng)度為2)
min() 用于尋找序列的最小值,同樣支持 key 參數(shù)進(jìn)行自定義比較。
15. sum()
對(duì)可迭代對(duì)象(通常是數(shù)字列表、元組)中的所有項(xiàng)求和??梢蕴峁┮粋€(gè)可選的 start 參數(shù)作為初始值。
numbers = [1, 2, 3, 4, 5]
print(f"列表 {numbers} 的和: {sum(numbers)}") # 輸出: 15
# 添加起始值
print(f"列表 {numbers} 的和加上起始值 10: {sum(numbers, 10)}") # 輸出: 25
# 對(duì)空列表求和 (默認(rèn) start=0)
print(f"空列表的和: {sum([])}") # 輸出: 0
sum() 是對(duì)數(shù)字序列進(jìn)行求和的快捷方式。注意它不能直接用于對(duì)非數(shù)字(如字符串)列表求和。
16. range()
返回一個(gè)表示算術(shù)級(jí)數(shù)序列的對(duì)象。常用于 for 循環(huán)中迭代指定的次數(shù)。它本身不創(chuàng)建列表,而是一個(gè)惰性序列。
print("迭代 0 到 4:")
for i in range(5): # range(stop) - 從 0 到 stop-1
print(i, end=" ") # 輸出: 0 1 2 3 4
print("\n")
print("迭代 2 到 5:")
for i in range(2, 6): # range(start, stop) - 從 start 到 stop-1
print(i, end=" ") # 輸出: 2 3 4 5
print("\n")
print("以步長(zhǎng) 2 迭代 1 到 9:")
for i in range(1, 10, 2): # range(start, stop, step)
print(i, end=" ") # 輸出: 1 3 5 7 9
print("\n")
# 將 range 對(duì)象轉(zhuǎn)換為列表 (以便查看)
range_list = list(range(3))
print(f"range(3) 轉(zhuǎn)為列表: {range_list}") # 輸出: [0, 1, 2]
range() 是控制循環(huán)次數(shù)的標(biāo)準(zhǔn)方式,它比手動(dòng)創(chuàng)建數(shù)字列表更高效(尤其是對(duì)于大范圍)。
17. enumerate()
返回一個(gè)枚舉對(duì)象。它接收一個(gè)可迭代對(duì)象作為參數(shù),并生成一系列包含索引和對(duì)應(yīng)值的元組。
fruits = ["apple", "banana", "cherry"]
print("使用 enumerate 迭代列表:")
for index, fruit in enumerate(fruits):
print(f"索引 {index}: {fruit}")
# 輸出:
# 索引 0: apple
# 索引 1: banana
# 索引 2: cherry
print("\n使用 enumerate 并指定起始索引:")
for i, fruit in enumerate(fruits, start=1): # 從索引 1 開(kāi)始
print(f"編號(hào) {i}: {fruit}")
# 輸出:
# 編號(hào) 1: apple
# 編號(hào) 2: banana
# 編號(hào) 3: cherry
當(dāng)循環(huán)中既需要元素的值也需要其索引時(shí),enumerate() 是最 Pythonic(符合 Python 風(fēng)格)且最高效的方式,避免了手動(dòng)維護(hù)計(jì)數(shù)器。
18. zip()
接收任意多個(gè)可迭代對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的迭代器。如果可迭代對(duì)象的長(zhǎng)度不同,zip 會(huì)在最短的對(duì)象耗盡后停止。
names = ["Alice", "Bob", "Charlie"]
ages = [30, 25, 35]
cities = ["New York", "Paris", "London"]
print("使用 zip 組合三個(gè)列表:")
zipped_data = zip(names, ages, cities)
print(f"zip 對(duì)象類(lèi)型: {type(zipped_data)}") # 輸出: <class 'zip'>
# 迭代 zip 對(duì)象
for name, age, city in zipped_data:
print(f"{name} is {age} years old and lives in {city}.")
# 輸出:
# Alice is 30 years old and lives in New York.
# Bob is 25 years old and lives in Paris.
# Charlie is 35 years old and lives in London.
# 注意: zip 對(duì)象是一次性的迭代器,迭代過(guò)后就空了
# print(list(zipped_data)) # 會(huì)輸出 []
# 如果長(zhǎng)度不同
ids = [101, 102]
items = ["Laptop", "Mouse", "Keyboard"]
print("\n組合不同長(zhǎng)度的列表:")
for id_val, item_val in zip(ids, items):
print(f"ID: {id_val}, Item: {item_val}")
# 輸出: (只到最短的 ids 結(jié)束)
# ID: 101, Item: Laptop
# ID: 102, Item: Mouse
zip() 非常適合并行處理多個(gè)序列,例如同時(shí)迭代鍵和值,或合并來(lái)自不同來(lái)源的相關(guān)數(shù)據(jù)。
19. sorted()
返回一個(gè)新的、根據(jù)可迭代對(duì)象中的項(xiàng)排序后的列表。原始的可迭代對(duì)象保持不變。
numbers = [3, 1, 4, 1, 5, 9, 2]
print(f"原始列表: {numbers}")
sorted_numbers = sorted(numbers)
print(f"排序后列表 (升序): {sorted_numbers}") # 輸出: [1, 1, 2, 3, 4, 5, 9]
print(f"原始列表仍未改變: {numbers}")
# 降序排序
desc_sorted_numbers = sorted(numbers, reverse=True)
print(f"降序排序后列表: {desc_sorted_numbers}") # 輸出: [9, 5, 4, 3, 2, 1, 1]
# 對(duì)字符串列表排序 (字典序)
words = ["banana", "Apple", "cherry"] # 注意大小寫(xiě)影響排序
sorted_words = sorted(words)
print(f"字符串列表排序: {sorted_words}") # 輸出: ['Apple', 'banana', 'cherry']
# 使用 key 函數(shù)自定義排序規(guī)則 (例如按長(zhǎng)度)
sorted_words_by_length = sorted(words, key=len)
print(f"按長(zhǎng)度排序: {sorted_words_by_length}") # 輸出: ['Apple', 'banana', 'cherry'] (長(zhǎng)度相同則保持原相對(duì)順序)
# 對(duì)字典按值排序 (得到鍵的列表)
my_dict = {'a': 3, 'c': 1, 'b': 2}
sorted_keys_by_value = sorted(my_dict, key=my_dict.get)
print(f"字典按值排序 (得到鍵): {sorted_keys_by_value}") # 輸出: ['c', 'b', 'a']
sorted() 是通用的排序工具,適用于任何可迭代對(duì)象,并返回一個(gè)新的排序后的列表。key 參數(shù)和 reverse 參數(shù)提供了強(qiáng)大的自定義排序能力。它與列表的 .sort() 方法不同,后者是原地修改列表且只適用于列表。
20. open()
打開(kāi)一個(gè)文件,并返回一個(gè)文件對(duì)象(也稱為文件句柄)。這是進(jìn)行文件讀取、寫(xiě)入等操作的基礎(chǔ)。
file_path = 'example.txt'
# --- 寫(xiě)入文件 ('w' 模式會(huì)覆蓋舊內(nèi)容) ---
try:
# 使用 'with' 語(yǔ)句確保文件無(wú)論如何都會(huì)被關(guān)閉
with open(file_path, 'w', encoding='utf-8') as writer:
writer.write("這是第一行內(nèi)容。\n")
writer.write(f"Python 版本: 3.x\n") # 可以寫(xiě)入變量
print(f"成功寫(xiě)入到文件 '{file_path}'")
except IOError as e:
print(f"寫(xiě)入文件時(shí)發(fā)生錯(cuò)誤: {e}")
# --- 讀取文件 ('r' 模式) ---
try:
with open(file_path, 'r', encoding='utf-8') as reader:
# 讀取整個(gè)文件內(nèi)容
# content = reader.read()
# print(f"\n文件 '{file_path}' 的全部?jī)?nèi)容:\n{content}")
# 或者逐行讀取
print(f"\n逐行讀取文件 '{file_path}':")
for line in reader:
print(line.strip()) # strip() 去除行尾換行符
except FileNotFoundError:
print(f"錯(cuò)誤: 文件 '{file_path}' 未找到。")
except IOError as e:
print(f"讀取文件時(shí)發(fā)生錯(cuò)誤: {e}")
# --- 追加內(nèi)容到文件 ('a' 模式) ---
try:
with open(file_path, 'a', encoding='utf-8') as appender:
appender.write("這是追加的一行。\n")
print(f"\n成功追加內(nèi)容到文件 '{file_path}'")
except IOError as e:
print(f"追加文件時(shí)發(fā)生錯(cuò)誤: {e}")
open() 函數(shù)是文件操作的入口。第一個(gè)參數(shù)是文件路徑,第二個(gè)參數(shù)是模式('r'讀, 'w'寫(xiě), 'a'追加, 'b'二進(jìn)制模式等)。encoding='utf-8' 對(duì)于處理文本文件至關(guān)重要。強(qiáng)烈推薦使用 with open(...) 語(yǔ)法,它能自動(dòng)管理文件的關(guān)閉,即使發(fā)生錯(cuò)誤也能保證關(guān)閉,防止資源泄漏。
Python 的內(nèi)置函數(shù)遠(yuǎn)不止這些,大家可以進(jìn)一步探索Python官方文檔,了解更多內(nèi)置函數(shù)和標(biāo)準(zhǔn)庫(kù)模塊。