Python教程24:内置函数深入
Python教程24:内置函数深入 “工欲善其事,必先利其器。” Python提供了60多个内置函数(built-in functions),它们无需导入即可使用。今天我们深入学习最常用、最实用的内置函数,让你的代码更简洁高效。 1. 什么是内置函数 内置函数(Built-in Functions): Python解释器自带的函数 无需import即可直接使用 用C语言实现,性能优异 覆盖最常见的编程需求 查看所有内置函数: 1# dir(__builtins__)会列出所有内置对象 2# __builtins__是Python内置命名空间 3import builtins 4print(dir(builtins)) 5 6# 或者查看官方文档 7help(builtins) 我们已经用过很多内置函数:print()、len()、type()、int()、str()等。 2. 类型转换函数 基础类型转换 1# int() - 转换为整数 2# Python内置函数,将其他类型转为整数 3print(int("123")) # 123 4print(int(3.14)) # 3(截断小数部分) 5print(int("1010", 2)) # 10(二进制转十进制) 6print(int("FF", 16)) # 255(十六进制转十进制) 7 8# float() - 转换为浮点数 9print(float("3.14")) # 3.14 10print(float("inf")) # inf(无穷大) 11 12# str() - 转换为字符串 13print(str(123)) # "123" 14print(str([1, 2, 3])) # "[1, 2, 3]" 15 16# bool() - 转换为布尔值 17# 遵循Python的真值规则 18print(bool(0)) # False 19print(bool("")) # False 20print(bool([])) # False 21print(bool("False")) # True(非空字符串为True) 容器类型转换 1# list() - 转换为列表 2print(list("Python")) # ['P', 'y', 't', 'h', 'o', 'n'] 3print(list(range(5))) # [0, 1, 2, 3, 4] 4print(list({1, 2, 3})) # [1, 2, 3] 5 6# tuple() - 转换为元组 7print(tuple([1, 2, 3])) # (1, 2, 3) 8print(tuple("abc")) # ('a', 'b', 'c') 9 10# set() - 转换为集合(自动去重) 11print(set([1, 2, 2, 3, 3, 3])) # {1, 2, 3} 12print(set("hello")) # {'h', 'e', 'l', 'o'} 13 14# dict() - 转换为字典 15print(dict([('a', 1), ('b', 2)])) # {'a': 1, 'b': 2} 16print(dict(a=1, b=2)) # {'a': 1, 'b': 2} 3. 数学函数 1# abs() - 绝对值 2print(abs(-10)) # 10 3print(abs(-3.14)) # 3.14 4 5# round() - 四舍五入 6# 可以指定保留几位小数 7print(round(3.14159)) # 3 8print(round(3.14159, 2)) # 3.14 9print(round(3.14159, 3)) # 3.142 10 11# pow() - 幂运算 12# pow(x, y) 等价于 x ** y 13# pow(x, y, z) 等价于 (x ** y) % z(高效) 14print(pow(2, 3)) # 8 15print(pow(2, 3, 5)) # 3(即 8 % 5) 16 17# sum() - 求和 18# 可以指定起始值 19print(sum([1, 2, 3, 4, 5])) # 15 20print(sum([1, 2, 3], 10)) # 16(10 + 1 + 2 + 3) 21 22# min() / max() - 最小值/最大值 23print(min(1, 2, 3, 4, 5)) # 1 24print(max([1, 2, 3, 4, 5])) # 5 25print(min("apple", "banana")) # "apple"(字典序) 26 27# divmod() - 同时返回商和余数 28print(divmod(17, 5)) # (3, 2) 4. 序列操作函数 all() 和 any() 1#all() - 所有元素为True时返回True 2# Python内置函数,用于检查可迭代对象中所有元素 3print(all([True, True, True])) # True 4print(all([True, False, True])) # False 5print(all([])) # True(空序列) 6 7# 实际应用:检查所有数字是否为正数 8numbers = [1, 2, 3, 4, 5] 9print(all(n > 0 for n in numbers)) # True 10 11# any() - 任一元素为True时返回True 12print(any([False, False, True])) # True 13print(any([False, False, False])) # False 14print(any([])) # False(空序列) 15 16# 实际应用:检查是否含有偶数 17print(any(n % 2 == 0 for n in numbers)) # True sorted() 和 reversed() 1# sorted() - 排序(返回新列表) 2# 不修改原序列,返回排序后的新列表 3numbers = [3, 1, 4, 1, 5, 9, 2, 6] 4print(sorted(numbers)) # [1, 1, 2, 3, 4, 5, 6, 9] 5print(sorted(numbers, reverse=True)) # [9, 6, 5, 4, 3, 2, 1, 1] 6 7# 按长度排序 8words = ["python", "is", "awesome"] 9print(sorted(words, key=len)) # ['is', 'python', 'awesome'] 10 11# 按复杂规则排序 12students = [ 13 {"name": "Alice", "score": 85}, 14 {"name": "Bob", "score": 92}, 15 {"name": "Charlie", "score": 78} 16] 17print(sorted(students, key=lambda x: x["score"], reverse=True)) 18 19# reversed() - 反转(返回迭代器) 20print(list(reversed([1, 2, 3]))) # [3, 2, 1] 21print(list(reversed("Python"))) # ['n', 'o', 'h', 't', 'y', 'P'] zip() 和 enumerate() 1# zip() - 并行打包多个序列 2# Python内置函数,用于同时遍历多个序列 3names = ["Alice", "Bob", "Charlie"] 4ages = [25, 30, 35] 5cities = ["Beijing", "Shanghai", "Guangzhou"] 6 7# 打包成元组列表 8pairs = list(zip(names, ages, cities)) 9print(pairs) 10# [('Alice', 25, 'Beijing'), ('Bob', 30, 'Shanghai'), ('Charlie', 35, 'Guangzhou')] 11 12# 解包:zip的逆操作 13names2, ages2, cities2 = zip(*pairs) 14print(names2) # ('Alice', 'Bob', 'Charlie') 15 16# enumerate() - 带索引遍历 17# 返回(索引, 值)的元组 18for i, fruit in enumerate(["apple", "banana", "cherry"]): 19 print(f"{i}: {fruit}") 20 21# 指定起始索引 22for i, fruit in enumerate(["apple", "banana"], start=1): 23 print(f"{i}. {fruit}") 5. 高阶函数 map() 1# map() - 映射函数到序列 2# apply函数到每个元素,返回迭代器 3numbers = [1, 2, 3, 4, 5] 4 5# 平方 6squares = map(lambda x: x**2, numbers) 7print(list(squares)) # [1, 4, 9, 16, 25] 8 9# 字符串转大写 10words = ["hello", "world", "python"] 11upper_words = map(str.upper, words) 12print(list(upper_words)) # ['HELLO', 'WORLD', 'PYTHON'] 13 14# 多个序列 15a = [1, 2, 3] 16b = [4, 5, 6] 17sums = map(lambda x, y: x + y, a, b) 18print(list(sums)) # [5, 7, 9] filter() 1# filter() - 过滤序列 2# 保留使函数返回True的元素 3numbers = range(1, 11) 4 5# 过滤出偶数 6evens = filter(lambda x: x % 2 == 0, numbers) 7print(list(evens)) # [2, 4, 6, 8, 10] 8 9# 过滤空字符串 10strings = ["hello", "", "world", "", "python"] 11non_empty = filter(None, strings) # None会过滤掉假值 12print(list(non_empty)) # ['hello', 'world', 'python'] 6. 对象和属性函数 1# id() - 对象的唯一标识(内存地址) 2# Python内置函数,返回对象的身份标识 3a = [1, 2, 3] 4b = [1, 2, 3] 5print(id(a)) # 140234567890123(示例) 6print(id(b)) # 140234567890456(不同) 7print(id(a) == id(b)) # False 8 9# isinstance() - 类型检查 10print(isinstance(42, int)) # True 11print(isinstance("hello", str)) # True 12print(isinstance([1, 2], (list, tuple))) # True(多个类型) 13 14# hasattr() / getattr() / setattr() - 属性操作 15class Person: 16 def __init__(self, name): 17 self.name = name 18 19p = Person("Alice") 20print(hasattr(p, "name")) # True 21print(getattr(p, "name")) # "Alice" 22print(getattr(p, "age", 0)) # 0(默认值) 23setattr(p, "age", 25) 24print(p.age) # 25 25 26# dir() - 列出对象的所有属性和方法 27print(dir(str)) # 列出字符串的所有方法 7. 输入输出函数 1# print() -输出 2# sep参数:分隔符 3print("a", "b", "c", sep="-") # a-b-c 4 5# end参数:结束符(默认是换行) 6print("Hello", end=" ") 7print("World") # Hello World 8 9# file参数:输出到文件 10with open("output.txt", "w") as f: 11 print("Hello", file=f) 12 13# input() - 获取用户输入 14# 返回字符串,需要转换类型 15name = input("请输入姓名:") 16age = int(input("请输入年龄:")) 8. 编译和执行函数 1# eval() - 执行Python表达式字符串 2# 警告:不要对不可信的输入使用eval()! 3result = eval("1 + 2 * 3") 4print(result) # 7 5 6# exec() - 执行Python代码字符串 7code = """ 8def greet(name): 9 return f"Hello, {name}" 10print(greet("Alice")) 11""" 12exec(code) # 输出:Hello, Alice 13 14# compile() - 编译代码 15# 用于需要多次执行同一代码的场景 16code_obj = compile("1 + 2", "<string>", "eval") 17print(eval(code_obj)) # 3 安全警告:eval()和exec()很危险,不要对用户输入使用! ...