Python常用内置函数有哪些?print、input与type用法详解

阿橙
阿橙
发布时间:2026-10-22| 5人浏览过
原创

在编写一个简单的 Python 脚本(例如接收用户输入的端口号并校验配置)时,即使不使用 import 导入任何外部模块,你也已经在频繁使用 Python 自带的基础工具了。Python 解释器启动时会自动加载数十个“内置函数”(Built-in Functions),它们无需前缀、开箱即用,构成了整个语言运转的基石。本文将先梳理 Python 最常用的内置函数分类全景,随后深入剖析开发中使用频率最高的三大核心函数:负责控制台输出的 print()、负责获取交互输入的 input(),以及负责对象类型探查与元编程判定的 type(),帮助你在实际编码中写出更稳健的代码。

一、什么是内置函数?常用分类速览

内置函数是 Python 内核(由 builtins 模块提供)在运行阶段直接挂载在全局命名空间中的函数。截至 Python 3.10+,官方内置函数共计约 70 个左右。初学者并不需要死记硬背所有函数,日常开发中 80% 的场景集中在以下五大核心类别中:

  • 输入与输出(I/O)交互:包括控制台标准输出 print()、标准输入 input() 以及磁盘文件句柄创建 open()。
  • 类型创建与显式转换:包括类型探查 type()、继承判定 isinstance(),以及常见数据类型的构造函数 int()、float()、str()、bool()、list()、dict()、set()、tuple()。
  • 数学计算与极值汇总:求容器长度 len()、总和 sum()、绝对值 abs()、最大最小值 max() / min()、四舍五入 round() 及幂运算 pow()。
  • 序列与迭代器处理:生成等差数列 range()、带索引遍历 enumerate()、多序列打包 zip()、列表排序 sorted()、序列逆序 reversed()。
  • 对象探查与属性反射:查看对象属性与方法清单 dir()、获取对象唯一标识 id()、动态获取/设置属性 getattr() / setattr() / hasattr()。
Python常用内置函数有哪些?print、input与type用法详解
图 1:Python 核心内置函数功能分类导图

二、print() 函数深度解析与高阶参数

print() 是绝大多数开发者接触 Python 时执行的第一个函数。虽然它的基础用法只是输出字符串,但其背后包含控制格式、重定向目的地以及缓冲区刷新的完整参数体系。

1. print() 完整函数签名

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

该签名的各项参数职责如下:

  • *objects:可变位置参数,支持传入零个、一个或多个任意类型的 Python 对象。在输出前,print() 会自动调用各对象的 str() 方法将其转换为字符形式。
  • sep:多对象之间的分隔符,默认为单个空格 ' '。若传入空字符串 '' 或逗号、制表符,可实现紧密排列或表格化格式。
  • end:全部对象输出完毕后的结尾字符,默认为换行符 '\n'。将其替换为 '' 或空格可以阻止自动换行。
  • file:指定输出流对象,默认是控制台标准输出 sys.stdout。可以传入任何拥有 write(string) 方法的文件句柄。
  • flush:是否强制立即刷新输出缓冲区,默认为 False。在构建控制台倒计时、进度条或多线程日志时,将其设为 True 至关重要。

2. 核心参数用法代码示例

# 示例 1: 使用 sep 自定义多参数分隔符
print("2026", "10", "21", sep="-")
# 示例输出:2026-10-21

# 示例 2: 使用 end 实现单行不换行输出
for i in range(5):
    print(f"[{i}]", end=" ")
print()
# 示例输出:[0] [1] [2] [3] [4] 

# 示例 3: 重定向输出至日志文件
with open("task_run.log", "w", encoding="utf-8") as log_file:
    print("任务开始执行:状态初始化完成", file=log_file)

# 示例 4: 使用 flush=True 实现动态终端倒计时
import time
for remaining in range(3, 0, -1):
    print(f"\r等待重试中: {remaining}s...", end="", flush=True)
    time.sleep(1)
print("\r重试已触发!        ")
Python常用内置函数有哪些?print、input与type用法详解
图 2:print() 函数参数控制与标准输出流向图

三、input() 函数核心机制与输入安全处理

input() 用于暂停程序运行并等待用户从键盘输入。用户按下回车键后,输入内容会被传送给 Python 解释器。这里存在初学者最容易踩到的“类型陷阱”:无论用户键入的是数字、布尔值还是特殊符号,input() 的返回值始终是字符串类型(str)。

1. 基础用法与类型转换

在进行数学运算或范围判定前,必须进行显式类型转换(Type Casting)。如果不加转换直接做加法,会发生字符串拼接,甚至触发 TypeError:

# 错误示例:字符串相加导致非预期结果
val_a = input("请输入第一个数: ")  # 用户输入 10
val_b = input("请输入第二个数: ")  # 用户输入 20
print("运算结果:", val_a + val_b)   # 结果为 "1020",并非数值 30

2. 健壮的输入校验模式(防崩溃模板)

在生产与脚本交互中,用户可能输入空白字符或非数字字符(例如输入了字母 abc)。如果直接调用 int(input()),程序会直接因抛出 ValueError 而崩溃退出。规范的做法是结合循环与 try...except 异常捕获构建防御性输入机制:

def get_valid_positive_integer(prompt_text: str) -> int:
    """循环提示直到用户输入合法的正整数"""
    while True:
        raw_text = input(prompt_text).strip()
        if not raw_text:
            print("输入不能为空,请重新输入!")
            continue
        try:
            val = int(raw_text)
            if val <= 0:
                print("请输入大于 0 的正整数!")
                continue
            return val
        except ValueError:
            print(f"解析错误:'{raw_text}' 不是合法的整数,请重试!")

# 调用示例
port = get_valid_positive_integer("请输入服务端口号 (1-65535): ")
print(f"成功获取端口号: {port},数据类型已确认: {type(port)}")
Python常用内置函数有哪些?print、input与type用法详解
图 3:input() 字符输入与防御性类型转换执行流

四、type() 函数用法详解与 isinstance() 深度对比

在 Python 的“一切皆对象”哲学中,type() 扮演着双重角色:既是最直接的对象类型检查工具,又是构建类本身的元类(Metaclass)构造器。

1. 单参数用法:查询对象所属类型

调用 type(object) 会返回该对象所属的类对象(Class Object):

print(type(42))             # 示例输出:<class 'int'>
print(type("Python"))       # 示例输出:<class 'str'>
print(type([1, 2, 3]))      # 示例输出:<class 'list'>
print(type(type))           # 示例输出:<class 'type'> (type 本身也是 type 的实例)

2. type() 与 isinstance() 的关键区别

很多开发者在做类型校验时会犹豫:到底应该用 type(x) is int 还是 isinstance(x, int)?两者的核心区别在于是否考虑继承链(Inheritance Hierarchy):

  • type(obj):返回该对象的精准物理类型指针。它不会将子类对象判定为父类类型。
  • isinstance(obj, ClassInfo):遵循面向对象的多态原则。如果 obj 是目标类或其任何直接/间接子类的实例,均返回 True。

我们可以通过 Python 中 bool 继承自 int 的经典特性来验证这一点:

flag = True

# 1. 使用 type() 进行精准比较(不认子类)
print(type(flag) is bool)  # 输出:True
print(type(flag) is int)   # 输出:False

# 2. 使用 isinstance() 检查(遵循继承关系)
print(isinstance(flag, bool))  # 输出:True
print(isinstance(flag, int))   # 输出:True(因为 class bool 是 int 的子类)

工程规范建议:在绝大多数业务逻辑中,推荐优先使用 isinstance(),以保持面向对象程序的多态性和对子类扩展的开放性;仅在需要严格禁止子类行为(例如元编程、定制序列化反序列化底层驱动)时,才采用 type(x) is SpecificType。

3. 三参数用法:动态创建类(元编程)

当 type() 接收三个参数时,其签名为 type(name, bases, dict),此时它充当元类,能在运行时动态创建全新的类:

# 动态定义一个包含 say_hello 方法的 Worker 类
def custom_greeting(self):
    return f"你好,我是工号为 {self.id} 的工作人员"

Worker = type(
    "Worker",                      # 类名
    (object,),                     # 父类元组 (bases)
    {"id": 9527, "greet": custom_greeting}  # 属性与方法映射字典
)

w = Worker()
print(type(w))        # 示例输出:<class '__main__.Worker'>
print(w.greet())      # 示例输出:你好,我是工号为 9527 的工作人员
Python常用内置函数有哪些?print、input与type用法详解
图 4:type() 严格匹配与 isinstance() 继承判定的本质差异

五、综合实战:整合三大函数构建交互式系统

为了将 print() 的格式化控制、input() 的字符串获取与异常处理,以及 type() 的类型校验融会贯通,下面给出一个完整的控制台交互小工具:服务器内存配置计算器。该程序通过多参数输出、输入类型清洗与类型断言展示规范编码流程:

def calculate_server_spec():
    print("=" * 45)
    print("欢迎使用云计算规格规划计算器", "v1.0", sep=" @ ")
    print("=" * 45)

    # 1. 使用 input() 收集原始配置文本
    node_name = input("请输入集群节点名称 (例: web-node-01): ").strip()
    if not node_name:
        node_name = "default-node"

    # 2. 健壮获取数值型输入并完成类型转换
    while True:
        cpu_input = input("请输入单个节点 CPU 核心数: ").strip()
        try:
            cpu_cores = int(cpu_input)
            if cpu_cores <= 0:
                print("核心数必须大于 0,请重新输入!")
                continue
            break
        except ValueError:
            print(f"输入无效:'{cpu_input}' 无法转换为整数,请重新输入。")

    while True:
        mem_input = input("请输入单节点内存大小 (GB): ").strip()
        try:
            mem_gb = float(mem_input)
            if mem_gb <= 0:
                print("内存大小必须大于 0,请重新输入!")
                continue
            break
        except ValueError:
            print(f"输入无效:'{mem_input}' 无法转换为浮点数,请重新输入。")

    # 3. 使用 type() 进行类型探查与日志确认
    print("\n--- 变量物理类型自检清单 ---")
    print("节点名称类型:", type(node_name).__name__, sep=" -> ")
    print("核心数量类型:", type(cpu_cores).__name__, sep=" -> ")
    print("内存容量类型:", type(mem_gb).__name__, sep=" -> ")

    # 4. 计算并使用 print 各种参数格式化输出结果
    ratio = mem_gb / cpu_cores
    print("\n" + "-" * 45)
    print("【规划结果汇总报告】")
    print("节点标识", node_name, sep=": ")
    print("CPU核心总计", f"{cpu_cores} Cores", sep=": ")
    print("内存总量合计", f"{mem_gb:.1f} GB", sep=": ")
    print("核心内存配比", f"1 : {ratio:.2f} (GB/Core)", sep=": ")
    print("-" * 45)
    print("计算完成,感谢使用!", end="\n\n")

if __name__ == "__main__":
    calculate_server_spec()

六、总结与高频注意事项清单

在 Python 日常开发中,熟练并准确使用这几个函数能大幅降低低级 BUG 的发生率:

函数名 核心特征与默认行为 高频避坑与最佳实践
print() 默认以空格分隔多项、以换行符结尾,定向至标准输出 在实时日志与进度条场景中,必须显式传递 flush=True 避免因系统缓冲造成输出延迟。
input() 暂停程序执行,将终端按键序列作为 str 原样返回 严禁直接进行算术计算;必须通过 try...except ValueError 结构封装类型转换,严防非法字符导致程序崩溃。
type() 单参数返回对象所属类,三参数可动态构造类对象 业务层逻辑如需判断继承关系,应优先采用 isinstance();仅在需严格排除子类干扰时使用 type() is Target。

掌握了 Python 内置函数的基础架构与运转逻辑后,在后续编写各类脚本和工程项目时,你将能更加游刃有余地组织输入、控制输出并精准掌控对象类型。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。