欢迎光临
我们一直在努力

第一个Python程序:Hello World从零编写与运行

"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运行机制的关键窗口。

    回顾核心知识点:

  • 多种运行方式:交互式REPL适合快速实验,脚本文件适合编写完整程序,IDE提供一站式开发体验
  • 程序结构:Shebang、编码声明、导入语句、函数定义、主程序入口——每个部分都有其作用
  • 执行原理:源代码 -> 词法分析 -> 语法分析 -> AST -> 字节码 -> PVM执行
  • 错误处理:语法错误(编译时)、运行时错误(执行时)、逻辑错误(结果不符合预期)
  • 调试技巧:print调试、pdb调试器、logging模块
  • Hello World虽然简单,但它为你打开了一扇通往编程世界的大门。从今天起,你不再是一个旁观者,而是一个真正的Python程序员。接下来,请保持这份好奇心,继续探索Python的广阔世界。


    下一篇文章预告:《IDE选择:PyCharm vs VS Code vs Jupyter,哪个更适合你?》——我们将全面对比三大主流Python开发工具,从功能、性能、适用场景到配置技巧,帮你选出最适合自己的开发利器。

    赞(0)
    未经允许不得转载:171主机测评 » 第一个Python程序:Hello World从零编写与运行
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址