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 Noneprint() 函数的 sep 和 end 参数
print() 函数实际上是一个功能非常丰富的函数,它接受多个参数。了解这些参数可以让你更好地控制输出格式。
sep 参数用于指定多个参数之间的分隔符,默认为一个空格 ' '。end 参数用于指定输出结束后追加的字符,默认为换行符 '\n'。
print("苹果", "香蕉", "橙子", sep=",") # 输出:苹果,香蕉,橙子
print("第一行", end=" | ")
print("第二行") # 输出:第一行 | 第二行
print("a", "b", "c", sep=" -> ") # 输出:a -> b -> c
在 Python 3.11 中运行上述代码,输出结果为:
苹果,香蕉,橙子 第一行 | 第二行 a -> b -> cprint() 函数的美化输出
在 Python 3.11 中,我们可以结合多种参数来创建格式化的输出:
print("=" * 50) # 使用乘法运算符重复字符串
print(" Python 课程表")
print("=" * 50)
print("周一", "Python 基础", sep=":")
print("周二", "变量与数据类型", sep=":")
print("周三", "运算符与表达式", sep=":")
print("=" * 50)
输出:
================================================== Python 课程表 ================================================== 周一:Python 基础 周二:变量与数据类型 周三:运算符与表达式 ==================================================Python 代码的运行方式
方式一:交互式解释器
Python 自带一个交互式解释器(Interactive Interpreter),你可以在终端中输入 python3 或 python 来启动它。在交互式模式下,你可以逐行输入代码并立即看到结果:
交互式解释器非常适合快速测试一些短小的代码片段,以及学习 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 的基本形式是在字符串字面量前加上字母 f 或 F,然后在字符串内部使用大括号 {} 包裹需要插入的表达式或变量:
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 编程的第一步,包括:
- print() 函数:Python 中用于输出信息的基本函数,支持多种参数如
sep和end。 - 代码注释:使用
#创建单行注释,使用三引号"""..."""创建文档字符串。 - f-string:Python 3.6 引入的现代字符串格式化方式,在 Python 3.11 中功能更加丰富。
- Python 3.11 的新特性:更快的执行速度、更好的错误提示、f-string 调试表达式等。
通过今天的练习,你应该已经能够编写简单的 Python 程序来输出信息和格式化文本了。下一节课我们将学习 Python 中的变量、数据类型以及类型转换,敬请期待!