"Hello, World!"是每个程序员的第一行代码,它标志着你正式踏入了编程世界的大门。但一个简单的Hello World背后,隐藏着Python程序的运行机制、执行流程、文件结构等核心知识点。本文将从零开始,带你用多种方式编写和运行第一个Python程序,深入理解每个环节背后的原理,并手把手帮你解决常见的运行错误。
一、前言:Hello World的意义
在编程界,"Hello, World!"有着特殊的仪式感。它源自1978年Brian Kernighan和Dennis Ritchie合著的《C程序设计语言》一书中的第一个示例程序。从此,"Hello, World!"成为了所有编程学习者共同的起点。
一个看似简单的Hello World程序,实际上包含了编程学习的多个核心概念:
理解这些概念,远比记住"print(‘Hello, World!’)"这句话本身更加重要。本文将从零开始,带你完整经历编写、保存、运行、调试Python程序的全过程。
二、运行方式全景图
Python程序有多种运行方式,每种方式适合不同的场景:
#mermaid-svg-H7C5hVCWGWtuoGYj{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-H7C5hVCWGWtuoGYj .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-H7C5hVCWGWtuoGYj .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-H7C5hVCWGWtuoGYj .error-icon{fill:#552222;}#mermaid-svg-H7C5hVCWGWtuoGYj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-H7C5hVCWGWtuoGYj .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-H7C5hVCWGWtuoGYj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-H7C5hVCWGWtuoGYj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-H7C5hVCWGWtuoGYj .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-H7C5hVCWGWtuoGYj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-H7C5hVCWGWtuoGYj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-H7C5hVCWGWtuoGYj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-H7C5hVCWGWtuoGYj .marker.cross{stroke:#333333;}#mermaid-svg-H7C5hVCWGWtuoGYj svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-H7C5hVCWGWtuoGYj p{margin:0;}#mermaid-svg-H7C5hVCWGWtuoGYj .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-H7C5hVCWGWtuoGYj .cluster-label text{fill:#333;}#mermaid-svg-H7C5hVCWGWtuoGYj .cluster-label span{color:#333;}#mermaid-svg-H7C5hVCWGWtuoGYj .cluster-label span p{background-color:transparent;}#mermaid-svg-H7C5hVCWGWtuoGYj .label text,#mermaid-svg-H7C5hVCWGWtuoGYj span{fill:#333;color:#333;}#mermaid-svg-H7C5hVCWGWtuoGYj .node rect,#mermaid-svg-H7C5hVCWGWtuoGYj .node circle,#mermaid-svg-H7C5hVCWGWtuoGYj .node ellipse,#mermaid-svg-H7C5hVCWGWtuoGYj .node polygon,#mermaid-svg-H7C5hVCWGWtuoGYj .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-H7C5hVCWGWtuoGYj .rough-node .label text,#mermaid-svg-H7C5hVCWGWtuoGYj .node .label text,#mermaid-svg-H7C5hVCWGWtuoGYj .image-shape .label,#mermaid-svg-H7C5hVCWGWtuoGYj .icon-shape .label{text-anchor:middle;}#mermaid-svg-H7C5hVCWGWtuoGYj .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-H7C5hVCWGWtuoGYj .rough-node .label,#mermaid-svg-H7C5hVCWGWtuoGYj .node .label,#mermaid-svg-H7C5hVCWGWtuoGYj .image-shape .label,#mermaid-svg-H7C5hVCWGWtuoGYj .icon-shape .label{text-align:center;}#mermaid-svg-H7C5hVCWGWtuoGYj .node.clickable{cursor:pointer;}#mermaid-svg-H7C5hVCWGWtuoGYj .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-H7C5hVCWGWtuoGYj .arrowheadPath{fill:#333333;}#mermaid-svg-H7C5hVCWGWtuoGYj .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-H7C5hVCWGWtuoGYj .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-H7C5hVCWGWtuoGYj .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-H7C5hVCWGWtuoGYj .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-H7C5hVCWGWtuoGYj .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-H7C5hVCWGWtuoGYj .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-H7C5hVCWGWtuoGYj .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-H7C5hVCWGWtuoGYj .cluster text{fill:#333;}#mermaid-svg-H7C5hVCWGWtuoGYj .cluster span{color:#333;}#mermaid-svg-H7C5hVCWGWtuoGYj div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-H7C5hVCWGWtuoGYj .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-H7C5hVCWGWtuoGYj rect.text{fill:none;stroke-width:0;}#mermaid-svg-H7C5hVCWGWtuoGYj .icon-shape,#mermaid-svg-H7C5hVCWGWtuoGYj .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-H7C5hVCWGWtuoGYj .icon-shape p,#mermaid-svg-H7C5hVCWGWtuoGYj .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-H7C5hVCWGWtuoGYj .icon-shape .label rect,#mermaid-svg-H7C5hVCWGWtuoGYj .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-H7C5hVCWGWtuoGYj .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-H7C5hVCWGWtuoGYj .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-H7C5hVCWGWtuoGYj :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
Python程序运行方式
交互式运行
脚本式运行
IDE集成运行
Jupyter Notebook
Python REPL逐行输入逐行执行
IPython增强的交互环境
命令行运行python script.py
双击运行Windows .py文件关联
Shebang运行Linux/macOS ./script.py
PyCharm运行
VS Code运行
IDLE运行
浏览器中运行逐单元格执行
三、交互式运行:Python REPL
3.1 什么是REPL
REPL是Read-Eval-Print-Loop的缩写,即"读取-求值-输出-循环"。它是Python最直接的交互方式,输入一行代码,Python立即执行并返回结果。
3.2 启动Python交互式环境
Windows系统:
# 方法一:打开命令提示符,输入python
C:\\Users\\你的用户名> python
Python 3.12.4 (tags/v3.12.4:8f97e4a, Jun 6 2024, 16:49:07) [MSC v.1940 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
# 方法二:在开始菜单搜索"Python",点击"Python 3.12"
macOS/Linux系统:
# 打开终端,输入python3
$ python3
Python 3.12.4 (main, Jun 6 2024, 10:30:15) [GCC 13.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
3.3 在REPL中编写Hello World
# 进入REPL后,>>> 是提示符,表示可以输入代码
>>> print("Hello, World!")
Hello, World!
# 尝试更多操作
>>> 1 + 1
2
>>> "Python" * 3
'PythonPythonPython'
>>> name = "初学者"
>>> print(f"你好,{name}!欢迎来到Python世界!")
你好,初学者!欢迎来到Python世界!
# 查看帮助
>>> help(print)
Help on built–in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)
...
# 退出REPL
>>> exit()
# 或按 Ctrl+Z(Windows)或 Ctrl+D(macOS/Linux)
3.4 REPL的进阶使用
# 使用下划线获取上一个结果
>>> 3 + 5
8
>>> _ * 2
16
>>> _ + 10
26
# 多行输入
>>> for i in range(3):
... print(f"第{i + 1}行:Hello, World!")
... # 按两次回车结束多行输入
第1行:Hello, World!
第2行:Hello, World!
第3行:Hello, World!
# 查看历史记录
# 按上下箭头键浏览之前输入的命令
# 使用IPython获得更好的体验
# 安装:pip install ipython
# 启动:ipython
3.5 IPython:增强的交互式环境
IPython是Python交互式环境的增强版,提供了更丰富的功能:
# 安装IPython
pip install ipython
# 启动IPython
ipython
# IPython特性展示
In [1]: print("Hello, World!")
Hello, World!
# 自动补全(按Tab键)
In [2]: import math
In [3]: math.s # 按Tab键,显示所有以s开头的函数
# 查看函数文档(在函数名后加?)
In [4]: print?
# 显示print函数的文档字符串
# 查看源代码(在函数名后加??)
In [5]: import numpy as np
In [6]: np.array??
# 显示numpy.array的源代码(如果是纯Python实现)
# 魔术命令
In [7]: %timeit sum(range(1000))
# 测量代码执行时间
In [8]: %history
# 查看命令历史
In [9]: %lsmagic
# 列出所有魔术命令
# 运行系统命令
In [10]: !ls
# 在Windows上使用 !dir
四、脚本式运行:编写.py文件
4.1 创建第一个Python脚本
交互式环境适合实验和学习,但要编写完整的程序,我们需要创建Python脚本文件。
第一步:创建文件
使用任意文本编辑器(记事本、VS Code、Sublime Text等)创建一个新文件,命名为hello.py。
注意:Windows用户需要在文件资源管理器中开启"文件扩展名"显示,否则可能创建出hello.py.txt文件。
第二步:编写代码
# hello.py – 我的第一个Python程序
# -*- coding: utf-8 -*-
"""
我的第一个Python程序
这是一个多行注释,也叫docstring
"""
# 打印Hello World
print("Hello, World!")
# 打印更多信息
print("=" * 40)
print("欢迎来到Python编程世界!")
print("=" * 40)
# 使用变量
name = "Python初学者"
version = "3.12"
message = f"你好,{name}!你正在使用Python {version}"
print(message)
# 简单的计算
print("\\n— 简单计算 —")
a = 10
b = 20
print(f"{a} + {b} = {a + b}")
print(f"{a} – {b} = {a – b}")
print(f"{a} * {b} = {a * b}")
print(f"{a} / {b} = {a / b}")
4.2 在命令行中运行脚本
Windows:
# 打开命令提示符,切换到脚本所在目录
cd C:\\Users\\你的用户名\\Desktop
# 运行脚本
python hello.py
# 输出:
# Hello, World!
# ========================================
# 欢迎来到Python编程世界!
# ========================================
# 你好,Python初学者!你正在使用Python 3.12
#
# — 简单计算 —
# 10 + 20 = 30
# 10 – 20 = -10
# 10 * 20 = 200
# 10 / 20 = 0.5
macOS/Linux:
# 打开终端,切换到脚本所在目录
cd ~/Desktop
# 运行脚本
python3 hello.py
# 输出同上
4.3 程序结构解析
让我们逐行分析上面的程序,理解每个部分的作用:
# 1. Shebang行(仅Linux/macOS需要)
#!/usr/bin/env python3 # 指定解释器路径
# 2. 编码声明
# -*- coding: utf-8 -*- # 声明文件编码(Python 3默认UTF-8,可省略)
# 3. 模块文档字符串
"""
这是一个模块级别的docstring
描述整个文件的功能和用途
"""
# 4. 导入语句
import sys # 导入标准库模块
# 5. 全局变量
VERSION = "1.0.0" # 常量使用大写命名
# 6. 函数定义
def greet(name):
"""向用户打招呼"""
return f"你好,{name}!"
# 7. 类定义
class Calculator:
"""简单的计算器类"""
pass
# 8. 主程序入口
if __name__ == "__main__":
# 当脚本直接运行时执行
print(greet("Python学习者"))
4.4 if __name__ == "__main__" 详解
这是Python中最常见的代码模式之一,理解它的含义对编写Python程序至关重要:
# 文件:mymodule.py
print(f"mymodule的__name__是:{__name__}")
def useful_function():
return "这是一个有用的函数"
if __name__ == "__main__":
# 这段代码只在直接运行mymodule.py时执行
print("mymodule被直接运行")
print(useful_function())
else:
# 这段代码在mymodule被导入时执行
print("mymodule被导入")
# 文件:test_import.py
import mymodule # 导入mymodule
# 运行python mymodule.py 时的输出:
# mymodule的__name__是:__main__
# mymodule被直接运行
# 这是一个有用的函数
# 运行python test_import.py 时的输出:
# mymodule的__name__是:mymodule
# mymodule被导入
各部分的解释:
| __name__ | Python内置变量,表示当前模块的名称 |
| "__main__" | 当脚本直接运行时,__name__的值 |
| 模块名 | 当脚本被导入时,__name__的值是模块文件名(不含.py) |
| 作用 | 让模块既可以作为脚本运行,也可以被其他模块导入 |
五、在IDE中运行
5.1 在PyCharm中运行
PyCharm是专业的Python IDE,提供了最完善的一键运行体验。
创建和运行步骤:
第一步:创建项目
1. 打开PyCharm
2. 点击 "New Project"
3. 选择项目位置,如 C:\\Users\\用户名\\PycharmProjects\\helloworld
4. 选择Python解释器(推荐创建新的虚拟环境)
5. 点击 "Create"
第二步:创建Python文件
1. 在项目名称上右键 -> New -> Python File
2. 输入文件名:hello
3. 回车确认
第三步:编写代码
在编辑器中输入代码
第四步:运行程序
方法一:点击编辑器右上角的绿色三角形(Run)按钮
方法二:右键编辑器 -> Run 'hello'
方法三:快捷键 Ctrl+Shift+F10(Windows/Linux)或 Ctrl+Shift+R(macOS)
方法四:在代码区域右键 -> Run 'hello'
第五步:查看输出
运行结果会显示在PyCharm底部的Run窗口中
5.2 在VS Code中运行
VS Code是轻量级但功能强大的编辑器,通过插件可以获得接近IDE的体验。
配置和运行步骤:
第一步:安装Python插件
1. 打开VS Code
2. 点击左侧扩展图标(或按Ctrl+Shift+X)
3. 搜索 "Python"
4. 安装Microsoft官方发布的Python扩展
第二步:打开文件夹
1. File -> Open Folder
2. 选择或创建项目文件夹
第三步:创建Python文件
1. 点击左侧文件图标
2. 点击新建文件图标
3. 命名为 hello.py
第四步:选择Python解释器
1. 按 Ctrl+Shift+P 打开命令面板
2. 输入 "Python: Select Interpreter"
3. 选择已安装的Python版本
第五步:编写代码并运行
方法一:点击右上角的三角形(Run Python File)按钮
方法二:右键编辑器 -> Run Python -> Run Python File in Terminal
方法三:按 F5 启动调试模式运行
5.3 在IDLE中运行
IDLE是Python自带的简易IDE,适合初学者:
第一步:启动IDLE
Windows:开始菜单 -> Python 3.12 -> IDLE
macOS:终端输入 idle3
Linux:终端输入 idle3
第二步:创建新文件
File -> New File(或 Ctrl+N)
第三步:编写代码
在新窗口中输入代码
第四步:保存文件
File -> Save(或 Ctrl+S)
选择保存位置,输入文件名 hello.py
第五步:运行程序
Run -> Run Module(或 F5)
输出会显示在IDLE的Shell窗口中
六、Jupyter Notebook运行
Jupyter Notebook是一种基于Web的交互式编程环境,特别适合数据分析和学习。
# 安装Jupyter
pip install jupyterlab
# 启动Jupyter
jupyter lab
# 浏览器会自动打开 http://localhost:8888/lab
在Jupyter中编写Hello World:
# 在Jupyter的代码单元格中输入
# 按Shift+Enter执行
# 第一个单元格
print("Hello, World!")
print("这是Jupyter Notebook!")
# 第二个单元格
import matplotlib.pyplot as plt
import numpy as np
# Jupyter可以直接显示图表
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title("Jupyter中的Hello World图表")
plt.show()
# 第三个单元格 – Markdown单元格
# 可以在代码之间插入说明文字
# 支持Markdown格式和LaTeX数学公式
七、深入理解Python程序执行
7.1 Python程序的执行流程
#mermaid-svg-ZoVWYo1SJeUGbaNs{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ZoVWYo1SJeUGbaNs .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ZoVWYo1SJeUGbaNs .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ZoVWYo1SJeUGbaNs .error-icon{fill:#552222;}#mermaid-svg-ZoVWYo1SJeUGbaNs .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZoVWYo1SJeUGbaNs .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ZoVWYo1SJeUGbaNs .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZoVWYo1SJeUGbaNs .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZoVWYo1SJeUGbaNs .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ZoVWYo1SJeUGbaNs .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZoVWYo1SJeUGbaNs .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZoVWYo1SJeUGbaNs .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZoVWYo1SJeUGbaNs .marker.cross{stroke:#333333;}#mermaid-svg-ZoVWYo1SJeUGbaNs svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZoVWYo1SJeUGbaNs p{margin:0;}#mermaid-svg-ZoVWYo1SJeUGbaNs .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-ZoVWYo1SJeUGbaNs .cluster-label text{fill:#333;}#mermaid-svg-ZoVWYo1SJeUGbaNs .cluster-label span{color:#333;}#mermaid-svg-ZoVWYo1SJeUGbaNs .cluster-label span p{background-color:transparent;}#mermaid-svg-ZoVWYo1SJeUGbaNs .label text,#mermaid-svg-ZoVWYo1SJeUGbaNs span{fill:#333;color:#333;}#mermaid-svg-ZoVWYo1SJeUGbaNs .node rect,#mermaid-svg-ZoVWYo1SJeUGbaNs .node circle,#mermaid-svg-ZoVWYo1SJeUGbaNs .node ellipse,#mermaid-svg-ZoVWYo1SJeUGbaNs .node polygon,#mermaid-svg-ZoVWYo1SJeUGbaNs .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ZoVWYo1SJeUGbaNs .rough-node .label text,#mermaid-svg-ZoVWYo1SJeUGbaNs .node .label text,#mermaid-svg-ZoVWYo1SJeUGbaNs .image-shape .label,#mermaid-svg-ZoVWYo1SJeUGbaNs .icon-shape .label{text-anchor:middle;}#mermaid-svg-ZoVWYo1SJeUGbaNs .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ZoVWYo1SJeUGbaNs .rough-node .label,#mermaid-svg-ZoVWYo1SJeUGbaNs .node .label,#mermaid-svg-ZoVWYo1SJeUGbaNs .image-shape .label,#mermaid-svg-ZoVWYo1SJeUGbaNs .icon-shape .label{text-align:center;}#mermaid-svg-ZoVWYo1SJeUGbaNs .node.clickable{cursor:pointer;}#mermaid-svg-ZoVWYo1SJeUGbaNs .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ZoVWYo1SJeUGbaNs .arrowheadPath{fill:#333333;}#mermaid-svg-ZoVWYo1SJeUGbaNs .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ZoVWYo1SJeUGbaNs .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ZoVWYo1SJeUGbaNs .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZoVWYo1SJeUGbaNs .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ZoVWYo1SJeUGbaNs .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZoVWYo1SJeUGbaNs .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ZoVWYo1SJeUGbaNs .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ZoVWYo1SJeUGbaNs .cluster text{fill:#333;}#mermaid-svg-ZoVWYo1SJeUGbaNs .cluster span{color:#333;}#mermaid-svg-ZoVWYo1SJeUGbaNs div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ZoVWYo1SJeUGbaNs .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ZoVWYo1SJeUGbaNs rect.text{fill:none;stroke-width:0;}#mermaid-svg-ZoVWYo1SJeUGbaNs .icon-shape,#mermaid-svg-ZoVWYo1SJeUGbaNs .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZoVWYo1SJeUGbaNs .icon-shape p,#mermaid-svg-ZoVWYo1SJeUGbaNs .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ZoVWYo1SJeUGbaNs .icon-shape .label rect,#mermaid-svg-ZoVWYo1SJeUGbaNs .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZoVWYo1SJeUGbaNs .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ZoVWYo1SJeUGbaNs .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ZoVWYo1SJeUGbaNs :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
每个阶段
源代码 .py文件
词法分析器Lexer
Token流
语法分析器Parser
抽象语法树 AST
编译器Compiler
字节码 .pyc
Python虚拟机PVM
程序输出
将源代码分解为最小的语法单元
根据语法规则构建树形结构
将AST翻译为平台无关的字节码
逐条执行字节码指令
7.2 查看编译过程
# 查看AST(抽象语法树)
import ast
code = """
print("Hello, World!")
x = 10
y = 20
result = x + y
print(f"结果: {result}")
"""
tree = ast.parse(code)
print(ast.dump(tree, indent=2))
# 输出展示了Python如何解析源代码
# Module(
# body=[
# Expr(
# value=Call(
# func=Name(id='print', ctx=Load()),
# args=[
# Constant(value='Hello, World!')],
# keywords=[])),
# Assign(
# targets=[Name(id='x', ctx=Store())],
# value=Constant(value=10)),
# …
# ])
# 查看字节码
import dis
def hello_function():
print("Hello, World!")
x = 10
y = 20
result = x + y
return result
print("=== hello_function的字节码 ===")
dis.dis(hello_function)
# 输出解析:
# LOAD_GLOBAL 0 (print) # 加载print函数
# LOAD_CONST 1 ('Hello…') # 加载字符串常量
# CALL_FUNCTION 1 # 调用函数(1个参数)
# POP_TOP # 丢弃返回值
# LOAD_CONST 2 (10) # 加载常量10
# STORE_FAST 0 (x) # 存储到局部变量x
# LOAD_CONST 3 (20) # 加载常量20
# STORE_FAST 1 (y) # 存储到局部变量y
# LOAD_FAST 0 (x) # 加载变量x
# LOAD_FAST 1 (y) # 加载变量y
# BINARY_ADD # 执行加法
# STORE_FAST 2 (result) # 存储结果
# LOAD_FAST 2 (result) # 加载结果
# RETURN_VALUE # 返回结果
八、常见错误与调试
8.1 语法错误(SyntaxError)
语法错误是初学者最常遇到的问题。Python解释器会在发现语法错误时立即停止执行并给出提示。
# 错误1:缺少引号
# print(Hello, World!) # SyntaxError
# 正确写法:
print("Hello, World!")
# 错误2:缩进错误
# if True:
# print("Hello") # IndentationError: expected an indented block
# 正确写法:
if True:
print("Hello")
# 错误3:括号不匹配
# print("Hello" # SyntaxError: '(' was never closed
# 正确写法:
print("Hello")
# 错误4:使用中文标点
# print("Hello,World!") # 虽然不会报错,但逗号和感叹号是中文标点
# 正确写法:
print("Hello, World!") # 使用英文标点
# 错误5:赋值语句使用等号
# if x = 10: # SyntaxError: invalid syntax
# 正确写法:
x = 10
if x == 10:
print("x等于10")
8.2 运行时错误(RuntimeError)
# 错误1:NameError – 变量未定义
# print(message) # NameError: name 'message' is not defined
# 正确写法:
message = "Hello, World!"
print(message)
# 错误2:TypeError – 类型错误
# result = "Hello" + 42 # TypeError: can only concatenate str to str
# 正确写法:
result = "Hello" + str(42)
print(result) # Hello42
# 错误3:ZeroDivisionError – 除零错误
# result = 10 / 0 # ZeroDivisionError: division by zero
# 正确写法:
try:
result = 10 / 0
except ZeroDivisionError:
print("错误:除数不能为零")
# 错误4:FileNotFoundError – 文件未找到
# with open("nonexistent.txt") as f: # FileNotFoundError
# pass
# 正确写法:
try:
with open("nonexistent.txt") as f:
content = f.read()
except FileNotFoundError:
print("文件不存在")
8.3 逻辑错误
逻辑错误是最隐蔽的错误,代码能正常运行但结果不符合预期:
# 错误1:运算符优先级
# result = 10 + 20 * 3 # 预期90,实际70(乘法优先级更高)
# 正确写法:
result = (10 + 20) * 3
print(f"结果:{result}") # 90
# 错误2:整数除法
# Python 3中 / 是浮点除法
result = 5 / 2
print(result) # 2.5(不是2)
# 整数除法应使用 //
result = 5 // 2
print(result) # 2
# 错误3:可变对象作为默认参数
def add_item_wrong(item, items=[]): # 错误!
items.append(item)
return items
print(add_item_wrong(1)) # [1]
print(add_item_wrong(2)) # [1, 2](预期[2])
# 正确写法
def add_item_correct(item, items=None):
if items is None:
items = []
items.append(item)
return items
print(add_item_correct(1)) # [1]
print(add_item_correct(2)) # [2]
8.4 调试技巧
# 技巧1:使用print()进行基本调试
def calculate(x, y, operation):
print(f"DEBUG: x={x}, y={y}, operation={operation}") # 调试输出
if operation == "add":
result = x + y
elif operation == "multiply":
result = x * y
else:
result = None
print(f"DEBUG: result={result}") # 调试输出
return result
# 技巧2:使用pdb调试器
import pdb
def buggy_function(a, b):
pdb.set_trace() # 在此处设置断点
# 程序会在此暂停,进入交互式调试模式
# 常用命令:
# n (next) – 执行下一行
# s (step) – 进入函数
# c (continue) – 继续执行
# p (print) – 打印变量值
# l (list) – 查看源代码
# q (quit) – 退出调试
result = a / b
return result
# 技巧3:使用logging模块
import logging
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s [%(levelname)s] %(message)s"
)
def process_data(data):
logging.debug(f"开始处理数据:{data}")
try:
result = [x * 2 for x in data]
logging.info(f"处理成功,结果:{result}")
return result
except Exception as e:
logging.error(f"处理失败:{e}")
raise
九、Python程序运行方式对比
| 交互式REPL | 即时反馈,方便实验 | 不能保存代码 | 学习语法、测试小段代码 |
| 命令行脚本 | 简单直接,适合自动化 | 调试不便 | 运行脚本、批处理任务 |
| PyCharm | 功能最全,调试强大 | 资源占用大 | 中大型项目开发 |
| VS Code | 轻量,插件丰富 | 需要配置 | 多种语言的开发 |
| Jupyter | 可视化友好,适合数据探索 | 不适合大型工程 | 数据分析、教学演示 |
| IDLE | 无需安装,简单 | 功能有限 | 快速试验小代码 |
十、总结
从一行简单的print("Hello, World!")开始,我们深入探索了Python程序从编写到执行的完整过程。这不仅是一个程序的起点,更是理解Python运行机制的关键窗口。
回顾核心知识点:
Hello World虽然简单,但它为你打开了一扇通往编程世界的大门。从今天起,你不再是一个旁观者,而是一个真正的Python程序员。接下来,请保持这份好奇心,继续探索Python的广阔世界。
下一篇文章预告:《IDE选择:PyCharm vs VS Code vs Jupyter,哪个更适合你?》——我们将全面对比三大主流Python开发工具,从功能、性能、适用场景到配置技巧,帮你选出最适合自己的开发利器。

