上一篇【第 002 篇】IDE 配置实战——VS Code + Python 插件深度配置
下一篇【第 004 篇】Python 数据类型与变量:从零开始理解数据


系列说明:本系列共 30 篇,全面介绍 Python 编程从零基础到软件工程师的完整路径。本文为第 003 篇,聚焦于 Python 程序的基础运行方式、代码规范,以及 Python 语言的核心设计哲学——从第一行代码开始建立正确的编程观。


摘要

“Hello, World!” 不只是一个惯例,它是每个程序员与一门新语言的第一次握手。Python 的 Hello World 只需要一行代码,这背后藏着 Python 设计哲学的精髓:简洁即是美

本文将从这一行代码出发,带你了解:

  • Python 的两种运行方式:交互式解释器(REPL)与脚本文件
  • Python 的基础语法规则(缩进、注释、语句)
  • 代码风格规范 PEP 8 的核心要点
  • 文档字符串(Docstring)的正确写法
  • Python 之禅(The Zen of Python)—— 理解 Python 的设计哲学
  • 常见初学者错误及解决方法

本文的代码全部可以直接运行,建议边读边动手练习。


一、Python 是怎么工作的

在写第一行代码之前,有必要理解 Python 代码是怎么被"执行"的。

1.1 解释型语言 vs 编译型语言

常见的编程语言按执行方式分为两类:

类型代表语言工作方式
编译型C、C++、Go、Rust源码先编译成机器码,再执行。速度快,但需要先编译
解释型Python、Ruby、JavaScript源码逐行由解释器翻译并执行。无需编译,直接运行

Python 是解释型语言,这意味着:

  1. 你写的 .py 文件由 Python 解释器(interpreter) 直接读取执行
  2. 不需要先编译,改了代码保存后直接运行即可看到效果
  3. 跨平台:同一份 .py 文件可以在 Windows、macOS、Linux 上运行(前提是都安装了 Python)

1.2 Python 的执行流程

你写的 .py 文件
      ↓
Python 解释器读取源码
      ↓
编译成字节码(.pyc 文件,存放在 __pycache__ 目录)
      ↓
Python 虚拟机(PVM)执行字节码
      ↓
输出结果

你可能会在项目目录中看到 __pycache__ 文件夹,里面的 .pyc 文件就是字节码缓存,可以加快下次启动速度。这是正常现象,不需要手动处理。


二、两种运行方式

2.1 交互式解释器(REPL)

REPL 是 Read-Eval-Print Loop 的缩写(读取-求值-打印-循环)。打开终端输入 pythonpython3,就进入了交互模式:

$ python3
Python 3.12.4 (main, Jun  6 2024, 18:26:44)
Type "help", "copyright", "credits" or "license" for more information.
>>>

>>> 是提示符,表示 Python 在等待你输入。输入代码回车后立即执行并显示结果:

>>> print("Hello, World!")
Hello, World!

>>> 1 + 2
3

>>> "Hello" + " " + "Python"
'Hello Python'

>>> 2 ** 10  # 2 的 10 次方
1024

>>> exit()  # 退出 REPL

REPL 的适用场景

  • 快速测试一行代码是否正确
  • 探索某个库的 API
  • 做简单计算

REPL 的局限:代码不会保存,退出后丢失,不适合写完整程序。

2.2 脚本文件(.py 文件)

正式的 Python 程序都写在 .py 文件中,用文本编辑器或 IDE 编写后,在终端通过 python 命令运行。

第一步:创建文件

用 VS Code 新建文件 hello.py,输入以下内容:

print("Hello, World!")

第二步:运行文件

在终端中执行:

# Windows
python hello.py

# macOS / Linux
python3 hello.py

输出:

Hello, World!

就这么简单。Python 的 Hello World 只需要一行代码,而 Java 需要大约 5 行,C 需要约 6 行。这就是 Python 简洁性的体现。

2.3 VS Code 中直接运行

在 VS Code 中打开 hello.py,有以下几种运行方式:

  1. 右键菜单:右键编辑区 → “在终端中运行 Python 文件”
  2. 运行按钮:右上角的三角形播放按钮
  3. 快捷键Ctrl+F5(运行但不调试)
  4. 终端:打开内置终端(Ctrl+` ),手动输入命令

三、Hello World 代码解析

3.1 print() 函数

print("Hello, World!")

这行代码只做一件事:调用 print() 函数,将括号内的内容输出到屏幕(标准输出)。

print() 是 Python 的内置函数,我们来看看它的一些常用用法:

# 输出字符串
print("Hello, World!")

# 输出多个值(默认用空格分隔)
print("Hello", "World", "!")
# 输出:Hello World !

# 自定义分隔符
print("Hello", "World", sep=", ")
# 输出:Hello, World

# 自定义结尾(默认是换行 \n)
print("Hello", end=" ")
print("World")
# 输出:Hello World(在同一行)

# 输出数字
print(42)
print(3.14)

# 输出变量
name = "Alice"
age = 30
print(name, age)
# 输出:Alice 30

# 格式化输出(f-string,推荐方式)
print(f"我叫 {name},今年 {age} 岁")
# 输出:我叫 Alice,今年 30 岁

# 输出空行
print()

3.2 字符串基础

在上面的代码中,"Hello, World!" 是一个字符串(string)——用引号包裹的文本数据。

Python 的字符串可以用三种引号:

# 单引号
s1 = 'Hello'

# 双引号
s2 = "World"

# 三引号(可以跨行,常用于文档字符串)
s3 = """这是
一段
多行文本"""

# 单引号和双引号功能完全相同
# 通常选择其中一种保持一致(PEP 8 建议双引号)

# 字符串中包含引号时的处理
s4 = "It's a beautiful day"   # 双引号内可以有单引号
s5 = 'He said "Hello"'         # 单引号内可以有双引号
s6 = "He said \"Hello\""       # 使用转义符 \

四、Python 基础语法规则

4.1 缩进:Python 的灵魂

Python 最与众不同的语法特点是用缩进表示代码块,而不是用 {} 花括号。

# 正确写法:if 语句的代码块用缩进标识
if True:
    print("条件为真")   # 这行属于 if 代码块(缩进了 4 个空格)
    print("继续执行")   # 这行也属于 if 代码块
print("这行不在 if 里")  # 没有缩进,不属于 if 代码块
# 错误写法:缩进不一致会报错
if True:
    print("第一行")
  print("缩进错误")  # IndentationError!

缩进规则

  • 4 个空格作为一级缩进(PEP 8 标准,强烈推荐)
  • 不要用 Tab 和空格混用(Python 3 会报错)
  • VS Code 默认已配置为 4 空格,Tab 键自动转为 4 空格

缩进是 Python 的设计选择,目的是强制写出格式整洁、可读性强的代码。刚开始可能不习惯,用多了会觉得这其实是优点。

4.2 注释

注释是写给人看的说明,Python 解释器会忽略它。

# 这是单行注释,以 # 号开头

print("Hello")  # 也可以写在代码行后面(行内注释)

# 多行注释没有专门的语法
# 可以连续写多个单行注释

"""
这是用三引号写的多行注释
严格来说这是一个字符串字面量
但习惯上也用来写块注释
"""

'''
单引号三引号也可以
'''

注释的最佳实践

# 不好的注释:重复代码意思
x = x + 1  # 将 x 加 1

# 好的注释:解释为什么,不只是解释做什么
x = x + 1  # 补偿边界偏移,详见 issue #42

# 更好的做法:代码本身足够清晰,不需要注释
users_count += 1  # 新用户注册完成后计数器加 1

4.3 语句与续行

Python 中,一行就是一条语句。如果语句太长,可以用以下方式续行:

# 方法一:反斜杠 \ 续行(不推荐)
result = 1 + 2 + 3 + \
         4 + 5 + 6

# 方法二:括号内自动续行(推荐)
result = (
    1 + 2 + 3 +
    4 + 5 + 6
)

# 列表、字典、函数调用等括号内均可自动续行
my_list = [
    "item1",
    "item2",
    "item3",
]

# 函数调用
print(
    "Hello",
    "World",
    sep=", "
)

4.4 变量赋值

Python 的变量赋值用 = 号:

# 基本赋值
name = "Alice"
age = 30
height = 1.65
is_student = True

# 多重赋值
x = y = z = 0  # 三个变量同时赋值为 0

# 多变量同时赋值(解包赋值)
a, b, c = 1, 2, 3
print(a, b, c)  # 1 2 3

# 交换两个变量(Python 独特写法,无需临时变量)
x, y = 10, 20
x, y = y, x  # 交换
print(x, y)  # 20 10

五、PEP 8:Python 代码风格规范

5.1 什么是 PEP 8

PEP 8 是 Python 的官方代码风格指南(PEP = Python Enhancement Proposal,Python 增强提案)。遵循 PEP 8 是 Python 社区的约定俗成,让不同人写的代码看起来风格统一。

如果你配置了 Black 格式化器(第 002 篇已讲),大部分 PEP 8 规则会自动处理。但了解这些规则本身仍然重要。

5.2 核心规则速查

命名规范

# 变量名、函数名:snake_case(下划线分隔小写)
user_name = "Alice"
total_count = 100

def calculate_total(price, quantity):
    return price * quantity

# 类名:PascalCase(每个单词首字母大写)
class UserAccount:
    pass

class DatabaseConnection:
    pass

# 常量:全大写 + 下划线
MAX_SIZE = 100
DEFAULT_TIMEOUT = 30
PI = 3.14159

# 私有变量/方法:单下划线前缀(约定,非强制)
_internal_variable = "不建议外部直接访问"

# 特殊方法:双下划线前后
def __init__(self):
    pass

空行规范

# 顶级函数/类之间:2 个空行
def function_one():
    pass


def function_two():
    pass


class MyClass:
    # 类内方法之间:1 个空行
    def method_one(self):
        pass

    def method_two(self):
        pass

空格规范

# 运算符两侧加空格
x = 1 + 2
y = x * 3

# 函数参数默认值 = 两侧不加空格
def greet(name, greeting="Hello"):
    pass

# 逗号后面加空格
my_list = [1, 2, 3]
my_dict = {"a": 1, "b": 2}

# 冒号前不加空格,后面加空格(字典中)
my_dict = {"key": "value"}

导入规范

# 导入语句在文件顶部
# 顺序:标准库 → 第三方库 → 本地模块
# 每组之间空一行

import os
import sys

import requests
import numpy as np

from mypackage import mymodule

5.3 行长度限制

PEP 8 规定每行最长 79 个字符,但现代项目通常放宽到 88~100 个字符(Black 默认 88)。


六、文档字符串(Docstring)

6.1 什么是 Docstring

Docstring 是写在函数、类、模块开头的字符串,用来解释这段代码的用途、参数、返回值等。

def add(a, b):
    """返回两个数的和。"""
    return a + b

与普通注释不同,Docstring:

  1. 会被 Python 保存在对象的 __doc__ 属性中
  2. 可以通过 help() 函数查看
  3. 是生成 API 文档的基础
>>> help(add)
Help on function add in module __main__:

add(a, b)
    返回两个数的和。

6.2 Docstring 规范

单行 Docstring(适合简单函数):

def square(n):
    """返回 n 的平方。"""
    return n ** 2

多行 Docstring(Google 风格,推荐):

def calculate_discount(price, discount_rate):
    """计算折后价格。

    Args:
        price (float): 原价,单位为元。
        discount_rate (float): 折扣率,范围 0~1。例如 0.8 表示八折。

    Returns:
        float: 折后价格。

    Raises:
        ValueError: 当 discount_rate 不在 0~1 范围内时抛出。

    Examples:
        >>> calculate_discount(100, 0.8)
        80.0
    """
    if not 0 <= discount_rate <= 1:
        raise ValueError(f"折扣率必须在 0~1 之间,当前值:{discount_rate}")
    return price * discount_rate

七、Python 之禅(The Zen of Python)

在 Python REPL 中输入:

>>> import this

你会看到一段诗:

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

这 19 条格言是 Python 设计哲学的精华,其中最重要的几条:

  • Beautiful is better than ugly:代码要写得漂亮
  • Simple is better than complex:能简单就不要复杂
  • Readability counts:可读性很重要
  • There should be one obvious way to do it:做同一件事应该有一个显而易见的最佳方式

理解这些原则,才算真正懂 Python。


八、常见初学者错误

错误 1:IndentationError — 缩进问题

# 错误代码
if True:
print("Hello")  # 没有缩进!
IndentationError: expected an indented block after 'if' statement on line 1

修复

if True:
    print("Hello")  # 加上 4 个空格的缩进

错误 2:NameError — 使用未定义的变量

print(message)  # 使用了未赋值的变量
NameError: name 'message' is not defined

修复:先赋值再使用

message = "Hello, World!"
print(message)

错误 3:SyntaxError — 语法错误

print("Hello"   # 缺少右括号
SyntaxError: '(' was never closed

修复

print("Hello")

错误 4:Python 2 语法写成 Python 3

print "Hello"  # Python 2 的写法
SyntaxError: Missing parentheses in call to 'print'...

修复

print("Hello")  # Python 3 中 print 是函数,需要括号

错误 5:大小写敏感

Name = "Alice"
print(name)   # 注意:Name ≠ name
NameError: name 'name' is not defined

Python 是大小写敏感的语言,NamenameNAME 是三个不同的变量。


九、综合练习:写一个简单的自我介绍程序

现在用本文学到的知识,写一个小程序:

"""
自我介绍程序
演示 Python 基础语法:变量、print()、字符串格式化
"""

# 个人信息
name = "小明"
age = 25
city = "北京"
hobby = "写代码"
is_programmer = True

# 输出自我介绍
print("=" * 30)  # 打印 30 个等号作为分隔线
print("个人信息卡")
print("=" * 30)

# 使用 f-string 格式化输出
print(f"姓名:{name}")
print(f"年龄:{age} 岁")
print(f"城市:{city}")
print(f"爱好:{hobby}")
print(f"是否是程序员:{'是' if is_programmer else '否'}")

print("-" * 30)
print(f"大家好!我叫{name},今年{age}岁,来自{city}。")
print(f"我最大的爱好是{hobby},希望能和大家一起学习进步!")
print("=" * 30)

运行结果

==============================
个人信息卡
==============================
姓名:小明
年龄:25 岁
城市:北京
爱好:写代码
是否是程序员:是
------------------------------
大家好!我叫小明,今年25岁,来自北京。
我最大的爱好是写代码,希望能和大家一起学习进步!
==============================

你可以修改变量的值,换成自己的信息,这个程序就变成你的了。


十、总结

本文是你与 Python 的第一次正式接触,我们覆盖了很多基础内容:

  1. Python 的工作原理:解释型语言,源码 → 字节码 → 执行
  2. 两种运行方式:REPL(交互式)和脚本文件(.py)
  3. print() 函数:输出文本、数字、格式化字符串
  4. 基础语法:缩进规则、注释写法、变量赋值
  5. PEP 8 规范:命名约定、空格空行、行长度
  6. Docstring:函数文档的正确写法
  7. Python 之禅:理解 Python 的设计哲学
  8. 常见错误:IndentationError、NameError、SyntaxError 等

下一篇,我们正式进入 Python 的数据世界——数字、字符串、布尔值……理解这些基础数据类型,是掌握 Python 的关键第一步。


上一篇【第 002 篇】IDE 配置实战——VS Code + Python 插件深度配置
下一篇【第 004 篇】Python 数据类型与变量:从零开始理解数据


参考资料

  1. Python 官方教程 - 第一步
  2. PEP 8 — Style Guide for Python Code
  3. PEP 257 — Docstring Conventions
  4. PEP 20 — The Zen of Python
  5. Python REPL 官方文档
  6. f-string 格式化官方文档
  7. Google Python 风格指南(Docstring 格式参考)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐