- Python 基础
- Python - 首页
- Python - 概述
- Python - 历史
- Python - 特性
- Python vs C++
- Python - Hello World 程序
- Python - 应用领域
- Python - 解释器
- Python - 环境搭建
- Python - 虚拟环境
- Python - 基本语法
- Python - 变量
- Python - 数据类型
- Python - 类型转换
- Python - Unicode 系统
- Python - 字面量
- Python - 运算符
- Python - 算术运算符
- Python - 比较运算符
- Python - 赋值运算符
- Python - 逻辑运算符
- Python - 位运算符
- Python - 成员运算符
- Python - 身份运算符
- Python - 运算符优先级
- Python - 注释
- Python - 用户输入
- Python - 数字
- Python - 布尔值
- Python 控制语句
- Python - 控制流
- Python - 决策
- Python - if 语句
- Python - if else
- Python - 嵌套 if
- Python - match-case 语句
- Python - 循环
- Python - for 循环
- Python - for-else 循环
- Python - while 循环
- Python - break 语句
- Python - continue 语句
- Python - pass 语句
- Python - 嵌套循环
- Python 函数与模块
- Python - 函数
- Python - 默认参数
- Python - 关键字参数
- Python - 仅限关键字参数
- Python - 位置参数
- Python - 仅限位置参数
- Python - 可变参数
- Python - 变量作用域
- Python - 函数注解
- Python - 模块
- Python - 内置函数
- Python 字符串
- Python - 字符串
- Python - 字符串切片
- Python - 修改字符串
- Python - 字符串连接
- Python - 字符串格式化
- Python - 转义字符
- Python - 字符串方法
- Python - 字符串练习
- Python 列表
- Python - 列表
- Python - 访问列表元素
- Python - 修改列表元素
- Python - 添加列表元素
- Python - 删除列表元素
- Python - 遍历列表
- Python - 列表推导式
- Python - 排序列表
- Python - 复制列表
- Python - 合并列表
- Python - 列表方法
- Python - 列表练习
- Python 元组
- Python - 元组
- Python - 访问元组元素
- Python - 更新元组
- Python - 解包元组
- Python - 遍历元组
- Python - 合并元组
- Python - 元组方法
- Python - 元组练习
- Python 集合
- Python - 集合
- Python - 访问集合元素
- Python - 添加集合元素
- Python - 删除集合元素
- Python - 遍历集合
- Python - 合并集合
- Python - 复制集合
- Python - 集合运算符
- Python - 集合方法
- Python - 集合练习
- Python 字典
- Python - 字典
- Python - 访问字典元素
- Python - 修改字典元素
- Python - 添加字典元素
- Python - 删除字典元素
- Python - 字典视图对象
- Python - 遍历字典
- Python - 复制字典
- Python - 嵌套字典
- Python - 字典方法
- Python - 字典练习
- Python 数组
- Python - 数组
- Python - 访问数组元素
- Python - 添加数组元素
- Python - 删除数组元素
- Python - 遍历数组
- Python - 复制数组
- Python - 反转数组
- Python - 排序数组
- Python - 合并数组
- Python - 数组方法
- Python - 数组练习
- Python 文件处理
- Python - 文件处理
- Python - 写入文件
- Python - 读取文件
- Python - 重命名和删除文件
- Python - 目录
- Python - 文件方法
- Python - OS 文件/目录方法
- Python - OS 路径方法
- 面向对象编程
- Python - OOPs 概念
- Python - 类与对象
- Python - 类属性
- Python - 类方法
- Python - 静态方法
- Python - 构造函数
- Python - 访问修饰符
- Python - 继承
- Python - 多态
- Python - 方法重写
- Python - 方法重载
- Python - 动态绑定
- Python - 动态类型
- Python - 抽象
- Python - 封装
- Python - 接口
- Python - 包
- Python - 内部类
- Python - 匿名类和对象
- Python - 单例类
- Python - 包装类
- Python - 枚举
- Python - 反射
- Python 错误与异常
- Python - 语法错误
- Python - 异常
- Python - try-except 块
- Python - try-finally 块
- Python - 抛出异常
- Python - 异常链
- Python - 嵌套 try 块
- Python - 用户自定义异常
- Python - 日志记录
- Python - 断言
- Python - 内置异常
- Python 多线程
- Python - 多线程
- Python - 线程生命周期
- Python - 创建线程
- Python - 启动线程
- Python - 加入线程
- Python - 线程命名
- Python - 线程调度
- Python - 线程池
- Python - 主线程
- Python - 线程优先级
- Python - 守护线程
- Python - 线程同步
- Python 同步
- Python - 线程间通信
- Python - 线程死锁
- Python - 中断线程
- Python 网络编程
- Python - 网络编程
- Python - Socket 编程
- Python - URL 处理
- Python - 泛型
- Python 库
- NumPy 教程
- Pandas 教程
- SciPy 教程
- Matplotlib 教程
- Django 教程
- OpenCV 教程
- Python 杂项
- Python - 日期与时间
- Python - 数学
- Python - 迭代器
- Python - 生成器
- Python - 闭包
- Python - 装饰器
- Python - 递归
- Python - 正则表达式
- Python - PIP
- Python - 数据库访问
- Python - 弱引用
- Python - 序列化
- Python - 模板
- Python - 输出格式化
- Python - 性能测量
- Python - 数据压缩
- Python - CGI 编程
- Python - XML 处理
- Python - GUI 编程
- Python - 命令行参数
- Python - 文档字符串
- Python - JSON
- Python - 发送邮件
- Python - 扩展
- Python - 工具/实用程序
- Python - GUIs
- Python 高级概念
- Python - 抽象基类
- Python - 自定义异常
- Python - 高阶函数
- Python - 对象内部
- Python - 内存管理
- Python - 元类
- Python - 使用元类进行元编程
- Python - 模拟和存根
- Python - Monkey Patching
- Python - 信号处理
- Python - 类型提示
- Python - 自动化教程
- Python - Humanize 包
- Python - 上下文管理器
- Python - 协程
- Python - 描述符
- Python - 诊断和修复内存泄漏
- Python - 不可变数据结构
- Python 有用资源
- Python - 问答
- Python - 在线测验
- Python - 快速指南
- Python - 参考
- Python - 速查表
- Python - 项目
- Python - 有用资源
- Python - 讨论
- Python 编译器
- NumPy 编译器
- Matplotlib 编译器
- SciPy 编译器
Python 解释器及其模式
Python 解释器
Python 是一种基于解释器的语言。在 Linux 系统中,Python 的可执行文件安装在 /usr/bin/ 目录下。对于 Windows,可执行文件 (python.exe) 位于安装文件夹中(例如 C:\python311)。
本教程将教你Python 解释器如何在交互模式和脚本模式下工作。Python 代码一次执行一条语句。Python 解释器有两个组件。翻译器检查语句的语法。如果正确,它会生成中间字节码。然后有一个 Python 虚拟机将字节码转换为原生二进制代码并执行它。下图说明了该机制。
Python 解释器具有交互模式和脚本模式。
Python 解释器 - 交互模式
从命令行终端启动 Python 时,如果没有附加任何选项,则会出现 Python 提示符 >>>,并且 Python 解释器的工作原理是REPL(读取、评估、打印、循环)。在 Python 提示符前面输入的每个命令都会被读取、翻译和执行。一个典型的交互式会话如下所示。
>>> price = 100 >>> qty = 5 >>> total = price*qty >>> total 500 >>> print ("Total = ", total) Total = 500
要关闭交互式会话,请输入行尾字符(Linux 为 ctrl+D,Windows 为 ctrl+Z)。您也可以在 Python 提示符前面键入quit() 并按 Enter 键返回到操作系统提示符。
>>> quit() $
标准 Python 发行版提供的交互式 shell 不具备行编辑、历史搜索、自动完成等功能。您可以使用其他高级交互式解释器软件,例如IPython 和bpython,以获得更多功能。
Python 解释器 - 脚本模式
与在交互式环境中一次输入并获取一条指令的结果不同,可以将一组指令保存在文本文件中,确保其具有.py扩展名,并将文件名用作 Python 命令的命令行参数。
使用任何文本编辑器(例如 Linux 上的 vim 或 Windows 上的记事本)将以下几行保存为prog.py。
print ("My first program") price = 100 qty = 5 total = price*qty print ("Total = ", total)
当我们在Windows机器上执行上述程序时,将产生以下结果
C:\Users\Acer>python prog.py My first program Total = 500
请注意,尽管Python一次性执行整个脚本,但在内部它仍然是逐行执行的。
对于Java之类的基于编译器的语言,只有在整个代码没有错误的情况下,源代码才会转换为字节码。而在Python中,语句会一直执行到遇到第一个错误。
让我们在上述代码中故意引入一个错误。
print ("My first program") price = 100 qty = 5 total = prive*qty #Error in this statement print ("Total = ", total)
请注意变量名prive拼写错误,应为price。尝试像以前一样再次执行脚本:
C:\Users\Acer>python prog.py My first program Traceback (most recent call last): File "C:\Python311\prog.py", line 4, in <module> total = prive*qty ^^^^^ NameError: name 'prive' is not defined. Did you mean: 'price'?
请注意,错误语句之前的语句已执行,然后出现错误消息。因此,现在可以清楚地看到Python脚本是以解释方式执行的。
Python解释器 - 使用Shebang #!
除了像上面那样执行Python脚本外,该脚本本身也可以像shell脚本一样在Linux中自执行。您必须在脚本顶部添加一行shebang。Shebang指示哪个可执行文件用于解释脚本中的Python语句。脚本的第一行以#!开头,后跟Python可执行文件的路径。
修改prog.py脚本如下:
#! /usr/bin/python3.11 print ("My first program") price = 100 qty = 5 total = price*qty print ("Total = ", total)
要将脚本标记为自执行,请使用chmod命令
$ chmod +x prog.py
现在,您可以直接执行脚本,而无需将其用作命令行参数。
$ ./hello.py
交互式Python - IPython
IPython(代表Interactive Python)是Python的一个增强型且功能强大的交互式环境,与标准Python shell相比具有许多功能。IPython最初由Fernando Perez于2001年开发。
IPython具有以下重要特性:
IPython 的对象自省能力,可以在运行时检查对象的属性。
其语法高亮显示功能有助于识别语言元素,例如关键字、变量等。
交互历史会被内部存储并可以重现。
关键字、变量和函数名的Tab自动补全是最重要的特性之一。
IPython的魔法命令系统可用于控制Python环境和执行操作系统任务。
它是Jupyter Notebook和其他Jupyter项目前端工具的主要内核。
使用PIP安装程序实用程序安装IPython。
pip3 install ipython
从命令行启动IPython
C:\Users\Acer>ipython Python 3.11.2 (tags/v3.11.2:878ead1, Feb 7 2023, 16:38:35) [MSC v.1934 64 bit (AMD64)] on win32 Type 'copyright', 'credits' or 'license' for more information IPython 8.4.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
与标准解释器中的常规>>>提示符不同,您会注意到两个主要的IPython提示符,如下所述:
In[1]出现在任何输入表达式之前。
Out[1]出现在输出之前。
In [1]: price = 100 In [2]: quantity = 5 In [3]: total = price*quantity In [4]: total Out[4]: 500 In [5]:
Tab自动补全是由IPython提供的最有用的增强功能之一。当您在对象前面的点后按下Tab键时,IPython会弹出相应的函数列表。
IPython通过在对象前面添加?来提供任何对象的信息(自省)。它包括文档字符串、函数定义和类的构造函数详细信息。例如,要探索上面定义的字符串对象var,请在输入提示符中输入var?
In [5]: var = "Hello World" In [6]: var? Type: str String form: Hello World Length: 11 Docstring: str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to 'strict'.
IPython的魔法函数非常强大。行魔法允许您在IPython内部运行DOS命令。让我们在IPython控制台中运行dir命令
In [8]: !dir *.exe Volume in drive F has no label. Volume Serial Number is E20D-C4B9 Directory of F:\Python311 07-02-2023 16:55 103,192 python.exe 07-02-2023 16:55 101,656 pythonw.exe 2 File(s) 204,848 bytes 0 Dir(s) 105,260,306,432 bytes free
Jupyter Notebook是一个基于Web的界面,用于Python、Julia、R和许多其他编程环境。对于Python,它使用IPython作为其主要内核。