Python基本语法与规范|第一部分:Python入门与环境搭建 (Python Foundations)

发布于 2024-05-21 分类: Python
系列文章: Python全方位教程
第 1 部分: Python语言概览|第一部分:Python入门与环境搭建 (Python Foundations) 第 2 部分: 搭建开发环境|第一部分:Python入门与环境搭建 (Python Foundations) 第 3 部分: Python基本语法与规范|第一部分:Python入门与环境搭建 (Python Foundations) (当前) 第 4 部分: 数据类型深入解析|第二部分:Python核心数据类型与运算符 (Core Data Types & Operators) 第 5 部分: 运算符大全|第二部分:Python核心数据类型与运算符 (Core Data Types & Operators) 第 6 部分: 条件与循环|第三部分:流程控制与数据结构操作 (Control Flow & Data Structures Manipulation) 第 7 部分: 数据结构高级操作|第三部分:流程控制与数据结构操作 (Control Flow & Data Structures Manipulation) 第 8 部分: 函数|第四部分:函数、模块与代码组织 (Functions, Modules & Code Organization) 第 9 部分: 模块与包|第四部分:函数、模块与代码组织 (Functions, Modules & Code Organization) 第 10 部分: 类与对象|第五部分:面向对象编程 (Object-Oriented Programming - OOP) 第 11 部分: OOP核心特性|第五部分:面向对象编程 (Object--Oriented Programming - OOP) 第 12 部分: 高级OOP主题|第五部分:面向对象编程 (Object-Oriented Programming - OOP) 第 13 部分: 迭代与生成|第六部分:高级Python编程 (Advanced Python) 第 15 部分: 内存管理与性能|第六部分:高级Python编程 (Advanced Python) 第 16 部分: 文件与目录操作|第七部分:Python标准库精选 (The Standard Library) 第 17 部分: 数据处理与序列化|第七部分:Python标准库精选 (The Standard Library) 第 18 部分: 网络与并发编程|第七部分:Python标准库精选 (The Standard Library) 第 20 部分: 系统交互|第七部分:Python标准库精选 (The Standard Library) 第 21 部分: 数据科学与分析入门|第八部分:Python生态与实战应用 (Ecosystem & Applications) 第 22 部分: Web开发入门|第八部分:Python生态与实战应用 (Ecosystem & Applications) 第 23 部分: GUI编程入门|第八部分:Python生态与实战应用 (Ecosystem & Applications) 第 24 部分: 图像处理入门|第八部分:Python生态与实战应用 (Ecosystem & Applications) 第 25 部分: 自动化脚本|第八部分:Python生态与实战应用 (Ecosystem & Applications) 第 26 部分: Python备忘单 (Cheatsheet)|第九部分:附录与资源 (Appendix & Resources) 第 27 部分: 常见面试题与解答|第九部分:附录与资源 (Appendix & Resources) 第 28 部分: 官方文档与其他学习资源链接|第九部分:附录与资源 (Appendix & Resources)

我们已经成功搭建了开发环境,现在是时候学习Python这门语言的“语法规则”了。就像学习一门外语需要先掌握字母和语法一样,学习编程也需要从最基本的语法和规范开始。本章将为您打下坚实的语法基础。

3.1 关键字与标识符 (Keywords & Identifiers)

关键字 (Keywords)

关键字是Python语言中被赋予了特殊含义的单词,它们是语言结构的组成部分,绝对不能用作变量名、函数名或任何其他标识符的名称。

Python的关键字是固定的,你可以通过以下代码来查看当前版本的所有关键字:

import keyword
print(keyword.kwlist)

运行后,你会看到一个列表,包含了类似 False, None, True, if, for, while, class, def 等单词。我们将在后续的课程中逐一学习它们。

标识符 (Identifiers)

标识符就是我们给变量、函数、类等对象起的名字。可以把它们想象成我们在现实世界中给事物起的名字,比如“张三”、“桌子”等。

命名规则 (必须遵守)

  1. 只能包含字母 (a-z, A-Z)、数字 (0-9) 和下划线 (_)。
  2. 第一个字符不能是数字。
  3. 区分大小写。例如,myVarmyvar 是两个完全不同的标识符。
  4. 不能使用关键字。

示例

  • 合法的标识符: user_name, age, _internal_data, Car1
  • 非法的标识符: 1st_place (以数字开头), user-name (包含连字符-), class (是关键字)

命名规范 (建议遵守的“潜规则” - PEP 8风格指南)

遵循良好的命名规范能让你的代码更易于阅读和维护。

  • 变量和函数名: 使用蛇形命名法 (snake_case),即所有字母小写,单词间用下划线连接。
    • 示例: user_age, calculate_tax()
  • 类名: 使用帕斯卡命名法 (PascalCase),也叫大驼峰命名法,即每个单词首字母大写。
    • 示例: Person, CarModel
  • 常量名: 所有字母大写,单词间用下划线连接。
    • 示例: MAX_CONNECTIONS, PI

3.2 注释 (Comments)

注释是代码中用于解释说明的文字,它们会被Python解释器完全忽略,只供程序员阅读。编写清晰的注释是良好编程习惯的重要组成部分。

单行注释

以井号 # 开头,从 # 到行尾的所有内容都是注释。

# 这是一个单行注释,用来解释下面的代码功能
user_age = 30 # 也可以把注释写在代码行的末尾

多行注释 (文档字符串 Docstrings)

Python没有像其他语言那样 /* ... */ 形式的块注释语法。但是,你可以使用三个单引号 ''' 或三个双引号 """ 来创建跨越多行的字符串。当这种字符串出现在模块、函数或类的开头时,它就成为了文档字符串 (Docstring),这是一个非常重要的概念。

"""
这是一个多行注释(文档字符串)。
它可以跨越多行,
通常用来详细描述一个函数或类的功能、参数和返回值。
"""

def add(a, b):
    """
    这个函数接收两个数字作为参数,并返回它们的和。
    :param a: 第一个数字
    :param b: 第二个数字
    :return: a 和 b 的和
    """
    return a + b

# 你可以通过 help() 函数或 __doc__ 属性查看文档字符串
help(add)
# 或者
print(add.__doc__)

3.3 语句与缩进 (Statements & Indentation)

语句 (Statements)

一条Python语句就是一条完整的指令。通常,我们每行只写一条语句。

name = "Alice"      # 这是一条赋值语句
print(name)         # 这是一条函数调用语句
x = 1 + 2           # 这也是一条语句

缩进 (Indentation)

这是Python最具特色的地方,也是初学者最容易犯错的地方。在Python中,缩进不是为了好看,而是语法的一部分,用来定义代码块的层级关系。 其他许多语言(如C++, Java)使用花括号 {} 来组织代码块,而Python使用缩进。

  • 规范: 统一使用 4个空格 作为一级缩进。
  • 作用: if 判断、for/while 循环、def 函数定义、class 类定义等下面的代码块都必须缩进。

正确缩进的例子

age = 18

if age >= 18:
    print("你已经是成年人了。") # <- 这一行属于 if 代码块,必须缩进
    print("你需要为自己的行为负责。") # <- 这一行也属于 if 代码块
else:
    print("你还是未成年人。") # <- 这一行属于 else 代码块,必须缩进

print("程序结束。") # <- 这一行没有缩进,不属于任何代码块

错误缩进的例子

age = 20

if age >= 18:
print("成年了") # 错误!这里缺少了必要的缩进
# 上面的代码会直接导致 IndentationError: expected an indented block

3.4 变量与多重赋值

变量 (Variables)

变量就像一个贴有标签的盒子,你可以把数据(比如数字、文字)放进去。在Python中,你不需要预先声明变量的类型,直接使用 = 赋值即可。

# 创建变量并赋值
name = "Bob"
age = 25
height = 1.75

# 打印变量的值
print(name)
print(age)

# 变量的值可以被改变
age = 26
print(age) # 输出将是 26

# 变量的类型也可以改变(动态类型)
my_var = 100       # my_var 是整数
my_var = "一百"    # 现在 my_var 变成了字符串

多重赋值 (Multiple Assignment)

Python支持一些非常便捷的赋值方式。

  1. 链式赋值: 将同一个值赋给多个变量。

    x = y = z = 0
    print(x, y, z) # 输出: 0 0 0
    
  2. 多元赋值: 将多个值同时赋给多个变量。

    name, age, city = "Charlie", 35, "New York"
    print(f"Name: {name}, Age: {age}, City: {city}")
    # 输出: Name: Charlie, Age: 35, City: New York
    
    # 这个特性常用于交换两个变量的值,非常优雅
    a = 10
    b = 20
    a, b = b, a # a和b的值被交换了
    print(f"a = {a}, b = {b}") # 输出: a = 20, b = 10
    

3.5 从控制台获取用户输入 (input() 函数)

程序常常需要与用户交互,input() 函数就是实现这一功能的桥梁。它会暂停程序的执行,等待用户在控制台输入内容,并按下回车键。

关键点input() 函数接收到的任何内容,一律被当作字符串(str)类型来处理。

基础示例

user_name = input("请输入你的名字: ")
print(f"你好, {user_name}!")

当你运行这段代码,程序会显示 "请输入你的名字: ",然后光标会停在那里等待你输入。假设你输入 "David" 并回车,程序会接着打印 "你好, David!"。

处理数字输入的示例

如果你想获取一个数字并进行计算,必须手动将 input() 返回的字符串转换为数字类型(如 intfloat)。

# 错误的做法
# age = input("请输入你的年龄: ")
# next_year_age = age + 1  # 这会引发 TypeError,因为不能把字符串和数字相加

# 正确的做法
age_str = input("请输入你的年龄: ")
age_int = int(age_str) # 使用 int() 函数将字符串转换为整数
next_year_age = age_int + 1

print(f"明年,你就 {next_year_age} 岁了。")

章节小结

在本章中,我们掌握了Python最基础的语法元素:如何命名(标识符)、如何写注释、代码块如何组织(缩进)、如何存储数据(变量)以及如何与用户交互(input())。这些是构建任何复杂程序的基石。在下一章中,我们将深入探讨Python中丰富的数据类型。


-- 感谢阅读 --