Python 基础第一课:你好世界

课程概述

欢迎来到 Python 编程系列课程的第一天!本节课我们将一起踏入 Python 编程的精彩世界。今天的学习内容包括:Python 语言简介、安装与运行环境、print() 函数的标准输出、代码注释的写法,以及现代 Python 中最常用的 f-string(格式化字符串字面量)。本课程内容基于 Python 3.11 编写,涵盖了 Python 3.11 中引入的最新语法特性与最佳实践。无论你是完全没有编程经验的初学者,还是从其他语言转来的开发者,本课程都将帮助你建立扎实的基础。

Python 由荷兰程序员 Guido van Rossum 于 1991 年首次发布,至今已有超过 30 年的发展历史。Python 的设计哲学强调代码的可读性和简洁性,其核心原则之一就是"Readability counts"(可读性很重要)。Python 使用缩进(indentation)来划分代码块,而不是像许多其他语言那样使用大括号 {}begin/end 关键字。这种独特的设计使得 Python 代码在视觉上非常清晰,也强制开发者写出格式良好的代码。Python 的另一条著名的设计原则是"Simple is better than complex"(简单优于复杂),这使得 Python 成为最适合初学者入门的编程语言之一。

Python 3.11 的新特性

在学习基础知识之前,我们有必要了解一下 Python 3.11 相比之前版本带来了哪些重要改进。Python 3.11 于 2022 年 10 月正式发布,被誉为"Python 史上最快的版本",其解释器启动速度比 Python 3.10 快了 10-15%,而平均执行速度更是提升了 25%。这些性能的提升主要来自于对 Python 虚拟机(Virtual Machine)的深度优化和重构。Python 3.11 还引入了更为精确的错误提示信息(Better Error Messages),当程序出现异常时,Python 3.11 会显示更多上下文信息,帮助开发者更快地定位和修复问题。

在语法层面,Python 3.11 引入了"异常组"(Exception Groups)和except*语法,用于并发编程中的错误处理。同时,Python 3.11 还改进了类型提示(Type Hints)系统,支持使用变量名直接注解类型,并在标准库中添加了新的tomllib模块来解析 TOML 格式文件。Python 3.11 的另一个重要特性是对 f-string 的进一步增强——虽然 f-string 在 Python 3.6 就已引入,但 Python 3.11 对其进行了多项改进,包括支持更复杂的表达式求值和调试功能。了解这些新特性对于编写现代化的 Python 代码至关重要。

第一个 Python 程序:print() 函数

让我们从最简单的程序开始。传统上,程序员学习一门新语言的第一个程序就是"Hello, World!"(你好,世界!)。在 Python 中,这个程序简单到只需要一行代码:

print("Hello, World!")

运行这行代码,你将看到终端上输出:

Hello, World!

这就是你的第一个 Python 程序!虽然它非常简单,但其中包含了几个重要的概念。print() 是 Python 的一个内置函数(built-in function),函数名后面紧跟着一对圆括号 (),括号内的 "Hello, World!" 被称为函数的参数(argument)。print() 函数的作用是将括号内的内容输出到标准输出设备(通常是终端屏幕)。字符串内容必须用引号包裹起来,Python 支持单引号 '...' 和双引号 "..." 两种方式定义字符串,两者在功能上是等价的。

让我们多尝试几个 print() 的例子:

print("你好,世界!")
print('Python 3.11 是目前最新的稳定版本')
print("让我们开始学习 Python 编程吧!")

在 Python 3.11 中运行这些代码,你将看到:

你好,世界! Python 3.11 是目前最新的稳定版本 让我们开始学习 Python 编程吧!

print() 函数不仅可以输出字符串,还可以输出各种 Python 数据类型的值:

print(42)          # 输出整数
print(3.14159)     # 输出浮点数
print(True)        # 输出布尔值
print(None)        # 输出空值

输出结果:

42 3.14159 True None

print() 函数实际上是一个功能非常丰富的函数,它接受多个参数。了解这些参数可以让你更好地控制输出格式。

sep 参数用于指定多个参数之间的分隔符,默认为一个空格 ' 'end 参数用于指定输出结束后追加的字符,默认为换行符 '\n'

print("苹果", "香蕉", "橙子", sep=",")    # 输出:苹果,香蕉,橙子
print("第一行", end=" | ")
print("第二行")                            # 输出:第一行 | 第二行
print("a", "b", "c", sep=" -> ")           # 输出:a -> b -> c

在 Python 3.11 中运行上述代码,输出结果为:

苹果,香蕉,橙子 第一行 | 第二行 a -> b -> c

在 Python 3.11 中,我们可以结合多种参数来创建格式化的输出:

print("=" * 50)          # 使用乘法运算符重复字符串
print("   Python 课程表")
print("=" * 50)
print("周一", "Python 基础", sep=":")
print("周二", "变量与数据类型", sep=":")
print("周三", "运算符与表达式", sep=":")
print("=" * 50)

输出:

================================================== Python 课程表 ================================================== 周一:Python 基础 周二:变量与数据类型 周三:运算符与表达式 ==================================================

Python 代码的运行方式

方式一:交互式解释器

Python 自带一个交互式解释器(Interactive Interpreter),你可以在终端中输入 python3python 来启动它。在交互式模式下,你可以逐行输入代码并立即看到结果:

$ python3 Python 3.11.0 (main, Oct 24 2022, 18:15:42) [GCC 11.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> print("Hello, World!") Hello, World! >>>

交互式解释器非常适合快速测试一些短小的代码片段,以及学习 Python 的各种功能。当你输入一个表达式时,Python 会立即计算并显示结果:

>>> 2 + 3
5
>>> 10 / 3
3.3333333333333335
>>> "Hello" + " " + "Python"
'Hello Python'

方式二:脚本文件

将代码保存为 .py 文件,然后用 Python 解释器执行,这是实际开发中的主要方式:

$ python3 hello.py

假设 hello.py 文件内容为:

# hello.py - 第一个 Python 脚本
print("你好,Python 世界!")
print("欢迎来到 Python 3.11 课程")

Python 3.11 的 -m 运行模式

Python 3.11 还支持通过模块方式运行脚本:

$ python3 -m hello

这种方式会自动设置模块搜索路径,在大型项目中非常有用。

代码注释的艺术

注释(Comments)是代码中不会被 Python 解释器执行的文本,用于向人类读者解释代码的含义和意图。编写良好的注释是写出高质量代码的重要部分。Python 中的注释以井号 # 开头,直到该行末尾为止。

单行注释

单行注释是最常见的注释形式,用于解释一行或一小段代码的功能:

# 这是一个注释,解释下面的代码
x = 10  # 这是一个行内注释

# 计算圆的面积
radius = 5
area = 3.14159 * radius ** 2  # 圆面积 = π × r²
print(f"半径为 {radius} 的圆面积为:{area}")

注释应该解释"为什么"而不是"是什么"。例如,下面是一个不好的注释和一个好的注释:

# 不好的注释:只是重复了代码
x = x + 1  # 将 x 加 1

# 好的注释:解释了代码的目的
x = x + 1  # 跳过已处理的用户

多行注释(块注释)

虽然 Python 没有专门的多行注释语法,但我们可以使用多个连续的单行注释来实现多行注释的效果:

# ============================================================
# 这是一个复杂算法的说明
# 1. 首先对输入数据进行预处理
# 2. 然后应用核心算法
# 3. 最后进行结果后处理
# ============================================================

文档字符串(Docstring)

在 Python 中,还有一类特殊的注释被称为文档字符串(Documentation String),简称 Docstring。文档字符串使用三引号 """..."""'''...''' 包围,可以出现在模块、函数、类或方法的开头。文档字符串不仅是一段说明文字,还可以通过 __doc__ 属性和 help() 函数访问:

def greet(name):
    """
    向指定名字的人打招呼。

    参数:
        name (str): 人的名字

    返回:
        str: 问候语
    """
    return f"你好,{name}!欢迎学习 Python。"

在 Python 交互式解释器中:

>>> help(greet)
Help on function greet in module __main__:

greet(name)
    向指定名字的人打招呼

    参数:
        name (str): 人的名字

    返回:
        str: 问候语

>>> print(greet.__doc__)

    向指定名字的人打招呼

    参数:
        name (str): 人的名字

    返回:
        str: 问候语

注释的实用技巧

以下是一些编写注释的最佳实践:

# 1. 使用 TODO 注释标记待办事项
# TODO: 添加输入验证
def process_data(data):
    pass

# 2. 使用 FIXME 注释标记已知问题
# FIXME: 这个函数在某些边界情况下会崩溃
def calculate(x):
    return 10 / x

# 3. 使用 NOTE 注释提供额外说明
# NOTE: 这个算法的时间复杂度为 O(n)
def find_max(numbers):
    max_val = numbers[0]
    for num in numbers:
        if num > max_val:
            max_val = num
    return max_val

f-string:现代 Python 格式化字符串

f-string 是 Python 3.6 引入的一种全新的字符串格式化方式,全称为"formatted string literal"(格式化字符串字面量)。相比传统的 % 格式化方式和 str.format() 方法,f-string 更加简洁、直观和易读。在 Python 3.11 中,f-string 的功能得到了进一步增强。

f-string 的基本语法

f-string 的基本形式是在字符串字面量前加上字母 fF,然后在字符串内部使用大括号 {} 包裹需要插入的表达式或变量:

name = "张三"
age = 25
height = 1.75

# 使用 f-string 格式化字符串
print(f"姓名:{name}")
print(f"年龄:{age}")
print(f"身高:{height} 米")

输出:

姓名:张三 年龄:25 身高:1.75 米

在大括号中使用表达式

f-string 的大括号 {} 中不仅可以放置变量名,还可以放置任意的 Python 表达式:

a = 10
b = 20

# 在 f-string 中直接进行计算
print(f"{a} + {b} = {a + b}")
print(f"{a} × {b} = {a * b}")
print(f"{a}{b}% 是 {a * b / 100}")

# 使用函数调用
words = ["Python", "是", "一门", "很棒", "的", "语言"]
sentence = f"结论:{' '.join(words)}"
print(sentence)

输出:

10 + 20 = 30 10 × 20 = 200 10 的 20% 是 2.0 结论:Python 是一门很棒的语言

f-string 中的类型转换与格式化

f-string 支持类似于 str.format() 的格式化规格(Format Specifier),使用冒号 : 分隔变量名和格式化规格:

import math

# 保留小数位数
pi = math.pi
print(f"π 保留两位小数:{pi:.2f}")
print(f"π 保留四位小数:{pi:.4f}")

# 千位分隔符与精度控制
big_number = 1234567.89
print(f"大数字带千位分隔符:{big_number:,.2f}")

# 百分数格式化
ratio = 0.256
print(f"转换为百分比:{ratio:.1%}")

# 指数记数法
large_num = 123456789
print(f"使用科学计数法:{large_num:.2e}")

# 进制转换(这是 Python 3.11 的增强特性)
print(f"十进制 255 转换为十六进制:{255:08X}")  # 08X 表示宽度8,不足补0,大写十六进制
print(f"十进制 255 转换为二进制:{255:016b}")  # 016b 表示宽度16,不足补0,二进制

f-string 的对齐与填充

f-string 还支持强大的文本对齐和填充功能:

# 左对齐、右对齐、居中对齐
text = "Python"
print(f"|{text:<10}|")  # 左对齐,宽度10
print(f"|{text:>10}|")  # 右对齐,宽度10
print(f"|{text:^10}|")  # 居中对齐,宽度10

# 使用特定字符填充
print(f"|{text:*<10}|")  # 左对齐,用 * 填充
print(f"|{text:#>10}|")  # 右对齐,用 # 填充
print(f"|{text:-^10}|")  # 居中对齐,用 - 填充

# 制作表格
print("-" * 37)
print(f"|{'姓名':^10}|{'年龄':^8}|{'城市':^12}|")
print("-" * 37)
print(f"|{'张三':^10}|{28:^8}|{'北京':^12}|")
print(f"|{'李四':^10}|{35:^8}|{'上海':^12}|")
print(f"|{'王五':^10}|{42:^8}|{'深圳':^12}|")
print("-" * 37)

Python 3.11 中 f-string 的增强特性

Python 3.11 对 f-string 进行了一些重要的增强:

1. 支持自文档表达式(调试友好):

x = 42
# Python 3.11 中,可以在 f-string 中使用 = 来同时显示变量名和值
print(f"{x=}")
# 输出:x=42

name = "Alice"
print(f"{name=}, {len(name)=}")
# 输出:name='Alice', len(name)=5

2. 支持反斜杠转义:

虽然 Python 3.11 之前的版本不允许在 f-string 的表达式中使用直接的反斜杠,但在 Python 3.11 中我们可以通过在表达式外使用来处理:

# 使用字典来组织转义序列
escape_sequences = {
    "newline": "\n",
    "tab": "\t",
    "quote": "\""
}
print(f"换行符的 ASCII 码:{ord(escape_sequences['newline'])}")

3. 嵌套 f-string:

for width in [5, 10, 15]:
    print(f"{'#':*{width}}")  # 输出:#####, ##########, ###############

f-string 与其他格式化方式的对比

为了让你更好地理解 f-string 的优势,这里做一个全面的对比:

name = "小明"
score = 95.678

# 方式一:% 格式化(旧式)
print("姓名:%s,成绩:%.1f" % (name, score))

# 方式二:str.format() 方法
print("姓名:{},成绩:{:.1f}".format(name, score))
print("姓名:{0},成绩:{1:.1f}".format(name, score))
print("姓名:{n},成绩:{s:.1f}".format(n=name, s=score))

# 方式三:f-string(现代推荐方式)
print(f"姓名:{name},成绩:{score:.1f}")

三种方式的输出完全相同,但 f-string 显然是最简洁、最易读的。

综合练习题

练习一:个人介绍卡

使用 print() 函数和 f-string 编写一个程序,输出你的个人介绍卡:

# 个人介绍卡
name = "你的名字"
age = 18
city = "你的城市"
hobby = "你的爱好"

print("=" * 40)
print(f"     个  人  介  绍  卡")
print("=" * 40)
print(f"姓名:{name}")
print(f"年龄:{age} 岁")
print(f"城市:{city}")
print(f"爱好:{hobby}")
print("=" * 40)

练习二:数学计算展示

编写程序展示数学计算过程和结果:

a = 8
b = 3

print("=" * 35)
print(f"     数学计算演示 (Python 3.11)")
print("=" * 35)
print(f"a = {a}, b = {b}")
print("-" * 35)
print(f"加法:    a + b = {a} + {b} = {a + b}")
print(f"减法:    a - b = {a} - {b} = {a - b}")
print(f"乘法:    a × b = {a} × {b} = {a * b}")
print(f"除法:    a ÷ b = {a} ÷ {b} = {a / b:.4f}")
print(f"整除:    a // b = {a} // {b} = {a // b}")
print(f"取余:    a % b = {a} % {b} = {a % b}")
print(f"幂运算:  a ** b = {a} ** {b} = {a ** b}")
print("=" * 35)

练习三:使用注释编写程序文档

"""
课程:Python 基础第一课
功能:演示 print()、注释和 f-string 的用法
版本:Python 3.11
"""

# 定义常量
COURSE_NAME = "Python 编程入门"
LESSON_NUMBER = 1

# 定义变量
topics = ["print() 函数", "代码注释", "f-string 格式化"]
duration_minutes = 90

# 输出课程信息
print(f"课程名称:{COURSE_NAME}")
print(f"课时:第 {LESSON_NUMBER} 课")
print(f"预计时长:{duration_minutes} 分钟")
print("-" * 40)
print("本课主题:")
for i, topic in enumerate(topics, 1):
    print(f"  {i}. {topic}")

常见错误与调试

错误一:SyntaxError(语法错误)

如果你的代码有语法错误,Python 会报 SyntaxError。来看几个常见的例子:

# 错误:字符串没有关闭引号
print("你好)  # SyntaxError: EOL while scanning string literal

# 错误:括号不匹配
print("Hello"  # SyntaxError: unexpected EOF while parsing

# 错误:使用了中文标点符号
print"你好"  # SyntaxError: invalid character '('

错误二:NameError(名称错误)

# 错误:变量未定义就使用
print(message)  # NameError: name 'message' is not defined

错误三:TypeError(类型错误)

# 错误:数据类型不支持某种操作
print("年龄:" + 25)  # TypeError: can only concatenate str (not "int") to "str"

正确的方式是使用 f-string 或类型转换:

print(f"年龄:{25}")      # 方式一:使用 f-string
print("年龄:" + str(25))  # 方式二:使用 str() 转换

Python 3.11 小技巧

1. 使用 python3 -v 查看版本信息

$ python3 -v
Python 3.11.0 (main, Oct 24 2022, 18:15:42) [GCC 11.2.0]

2. 使用 -X dev 选项开启开发模式

$ python3 -X dev script.py

开发模式会开启额外的运行时检查,如资源泄漏警告等。

3. 使用 -b 选项避免字节字符串警告

$ python3 -b script.py

本章小结

今天我们学习了 Python 编程的第一步,包括:

  1. print() 函数:Python 中用于输出信息的基本函数,支持多种参数如 sepend
  2. 代码注释:使用 # 创建单行注释,使用三引号 """...""" 创建文档字符串。
  3. f-string:Python 3.6 引入的现代字符串格式化方式,在 Python 3.11 中功能更加丰富。
  4. Python 3.11 的新特性:更快的执行速度、更好的错误提示、f-string 调试表达式等。

通过今天的练习,你应该已经能够编写简单的 Python 程序来输出信息和格式化文本了。下一节课我们将学习 Python 中的变量、数据类型以及类型转换,敬请期待!

延伸阅读