第一章 Python 概述与语法基础
第一章 Python 概述与语法基础
本章主要介绍了 Python 语言的背景、基本语法及核心概念。下面我们将依次学习各个部分的内容。
1. Python 简介
- Python 的起源
- Python 由 Guido van Rossum 开发,1991 年发布第一个版本。
- 设计初衷是希望有一种语言既能调用计算机底层功能(类似 C/C++),又能像脚本语言那样简洁易用(类似 shell)。
- 因为 Guido 喜欢英国喜剧团体 Monty Python,所以叫做 “Python”。
- Python 的哲学
- 崇尚“优美、清晰、简单”的编程风格。
- 座右铭:“人生苦短,我用 Python”,说明 Python 能让开发过程更加高效、有趣。
- Python 的版本
- 主要有 Python2.x 和 Python3.x,目前主流使用 Python3.x。
2. Python 解释器及工作原理
- 解释器简介
- Python 程序通常存储在以
.py
结尾的文件中。 - 要运行这些文件,需要 Python 解释器来将源码转换成中间代码(字节码),再由虚拟机逐行解释执行。
- Python 程序通常存储在以
- 工作流程
- 编译阶段:将源代码转换为字节码。
- 执行阶段:虚拟机(VM)读取字节码并执行。
3. PyCharm 简介(略过安装步骤)
-
PyCharm
是一种常用的 Python 集成开发环境(IDE),提供了:
- 语法高亮、代码跳转、智能提示
- 调试、单元测试、项目管理等功能
-
在创建项目和文件时,通常会:
- 创建新项目,指定项目路径并关联 Python 解释器。
- 新建 Python 文件,例如
hello.py
,编写简单代码后直接运行。
4. Python 语言基本元素
变量
-
概念:变量是用来存储值的名字。
-
赋值方式
:用
=
号进行赋值
name = "smith" age = 20
标识符
-
定义:程序中用户自定义的名称,如变量名、函数名等。
-
规则
:
- 可以由字母(大小写敏感)、数字、下划线组成,但不能以数字开头。
- 要“见名知意”,提高代码可读性。
保留字
-
说明:保留字是 Python 内置的关键字,不能用作标识符名称。
-
示例
:
import keyword print(keyword.kwlist) # 输出所有保留字,如 if, else, def, class 等
常量
- 说明:Python 没有真正意义上的常量,但通常用全部大写的变量名来约定不可修改的值。
注释
-
单行注释
:使用
#
开头
# 这是一个单行注释
-
多行注释
:用连续的三个单引号或双引号包围
""" 这是多行注释 可以写很多内容 """
5. 数据类型
Python3 中常用的数据类型分为不可变数据和可变数据:
不可变数据(4 个)
-
数字(Number)
- 整型:如
25
- 浮点型:如
3.14
- 复数:如
4.7+0.666j
- 整型:如
-
字符串(String)
-
用单引号或双引号定义
greeting = "Hello World!"
-
-
元组(Tuple)
-
用圆括号定义,一旦创建不可修改
point = (10, 20)
coordinates = (5, 10) x = coordinates[0] # 5 y = coordinates[1] # 10 # coordinates[0] = 20 # ❌ 会报错,因为元组不可变
-
-
布尔值(Boolean)
- 只有两个值:
True
和False
- 只有两个值:
可变数据(3 个)
-
列表(List)
-
有序可变序列,用方括号定义
fruits = ["apple", "banana", "orange"] # 取值(索引从 0 开始) print(fruits[0]) # "apple" # 修改元素 fruits[1] = "pear" # ["apple", "pear", "orange"] # 添加元素 fruits.append("grape") # ["apple", "pear", "orange", "grape"] # 删除元素 del fruits[0] # ["pear", "orange", "grape"] fruits.remove("orange") # ["pear", "grape"] # 列表长度 print(len(fruits)) # 2
-
-
字典(Dictionary)
-
无序的键值对集合,用花括号定义
person = {"name": "Alice", "age": 30} # 访问 print(person["name"]) # "Alice" # 修改 person["age"] = 31 # {"name": "Alice", "age": 31} # 新增 person["city"] = "Beijing" # {"name": "Alice", "age": 31, "city": "Beijing"} # 删除 del person["name"] # {"age": 31, "city": "Beijing"} # 获取所有键或值 print(person.keys()) # dict_keys(['age', 'city']) print(person.values()) # dict_values([31, 'Beijing'])
-
-
集合(Set)
-
无序不重复的元素集合
nums = {1, 2, 3} nums.add(2) # {1, 2, 3} (重复元素不会被添加) nums.add(4) # {1, 2, 3, 4} nums.remove(1) # {2, 3, 4} # 集合运算 a = {1, 2, 3} b = {3, 4, 5} print(a.union(b)) # 并集 -> {1, 2, 3, 4, 5} print(a.intersection(b)) # 交集 -> {3} print(a.difference(b)) # 差集 -> {1, 2}
-
6. 运算符
Python 支持多种运算符,这里主要介绍以下几类:
1. 算术运算符
-
加(+)、减(-)、乘(*)、除(/)
-
地板除(//)
:只取整数部分
print(153 // 51) # 输出 3
-
取余(%)
:获取除法的余数
print(155 % 51) # 输出 2
2. 比较(关系)运算符
- 如
==
、!=
、>
、<
、>=
、<=
等,用于比较两个值的大小关系。
3. 赋值运算符
- 基本赋值:
=
- 复合赋值:如
+=
、-=
、*=
、/=
等。
4. 逻辑运算符
- 与(and)、或(or)、非(not)
5. 位运算符
- 对整数的二进制位进行操作(如按位与、或、异或等)。
6. 成员运算符
- 用于判断一个值是否属于某个序列,如
in
和not in
。
7. 身份运算符
- 用于比较两个对象的内存地址,如
is
和is not
。
8. 运算符优先级
- Python 中运算符有先后顺序,通常使用括号可以明确运算顺序。
7. 输入输出
输出
-
使用
print()
函数将内容输出到屏幕上。
print("hello world") print("hello", "python")
输入
-
使用
input()
函数获取用户输入。
name = input("请输入您的名字:") print("您好,%s!" % name)
8. 分支和循环控制语句
条件语句
-
单分支语句:如果条件为真,则执行对应代码块。
if condition: # 执行代码
-
双分支语句(if/else)
if condition: # 条件为真时执行 else: # 条件为假时执行
-
多分支语句(if/elif/else)
例如航空公司根据年龄设置票价:if age < 2: print("儿童免票") elif 2 <= age < 13: print("儿童打折票") else: print("成人票")
-
条件语句的嵌套
在 if 语句内部还可以使用 if 语句,实现更复杂的判断。
循环语句
-
for 循环
常与range()
函数一起使用,遍历列表或生成数字序列。for i in range(1, 11): print(i)
-
while 循环
当条件为真时,不断执行循环体内的语句。i = 1 while i <= 100: print(i) i += 1
-
嵌套循环
循环内部再包含循环,例如打印九九乘法表:for i in range(1, 10): for j in range(1, i + 1): print(f"{i}*{j}={i*j}", end=" ") print() # 换行
-
跳转语句
break
:跳出整个循环continue
:跳过本次循环,进入下一轮判断- 循环还可以带
else
子句,当循环正常结束时(非 break 退出)会执行 else 部分
-
空语句 pass
- 用于占位,不执行任何操作
if condition: pass # 暂时不实现代码
9. 自定义函数及参数
函数定义
-
使用
def
关键字来定义函数,后面跟函数名和参数列表,代码块需缩进。
def greet(name): """简单的问候函数""" print(f"Hello, {name}!")
-
返回值:使用
return
返回值,如果没有return
,默认返回None
。
参数传递
- 形参与实参
- 形参:在函数定义时的参数
- 实参:调用函数时传入的值
- 对于不可变数据(如数字、字符串、元组)传递的是值的拷贝;对于可变数据(如列表、字典)传递的是引用,函数内的修改会影响到外部对象。
参数类型
-
默认值参数
这种参数在定义函数时就给它设定了一个"备用值"。如果调用函数时不提供这个参数的值,函数就会使用这个预先设定好的默认值。这就像餐厅的套餐,如果你不特别要求,就会按照菜单上的标准配置上菜。
def add(a=10, b=5): # 默认 a=10, b=5 return a + b print(add()) # 使用默认值:10 + 5 = 15 print(add(20)) # 20 + 5 = 25 print(add(8, 2)) # 8 + 2 = 10
-
关键字参数
这种参数让你可以在调用函数时明确指定每个参数的名称和对应的值。这样无论参数的顺序如何,函数都能正确识别你想要传递的值。这就像在填表格时,你不需要按照表格的顺序填写,只要在每个空格旁边标明是什么信息就可以了。
def subtract(*, a, b): # `*` 强制要求使用关键字参数 return a - b print(subtract(a=20, b=8)) # 20 - 8 = 12 print(subtract(b=5, a=15)) # 15 - 5 = 10 (顺序不同,但使用关键字参数)
-
引用传参
在Python中,当你将列表等可变对象作为参数传递给函数时,函数内部对该对象的修改会影响到原始对象。这就像两个人共用一本笔记本,其中一个人在笔记本上做了修改,另一个人打开笔记本时也会看到这些修改。
def modify_list(lst): lst.append(100) # 修改列表 print("函数内部:", lst) my_list = [1, 2, 3] modify_list(my_list) # 传入列表(引用传递) print("函数外部:", my_list) # 原列表被修改
-
不定长参数
- 用
*args
表示位置参数元组 - 用
**kwargs
表示关键字参数字典
def fun(a, b, *args, **kwargs): print(a) print(b) print(args) print(kwargs) fun(1, 2, 3, 4, name="hello", age=20) # 输出: # 1 # 2 # (3, 4) # {'name': 'hello', 'age': 20}
- 用
匿名函数(lambda 表达式)
-
概念:不使用
def
定义,适用于简单、一次性的函数。 -
语法:
square = lambda x: x * x print(square(5)) # 输出 25
-
注意:lambda 只能包含简单的表达式,功能不如
def
定义的函数灵活。