干货分享,感谢您的阅读!备注:本博客将自己初步学习Python的总结进行分享,希望大家通过本博客可以在短时间内快速掌握Python的基本程序编码能力,如有错误请留言指正,谢谢!(持续更新)

一、快速了解 Python 和 环境准备

(一)Python 快速介绍

Python 是一种 简洁、强大、易读 的编程语言,广泛应用于 Web 开发、数据分析、人工智能、自动化运维 等领域。它由 Guido van Rossum 在 1991 年设计,因其清晰的语法和强大的生态系统,迅速成为全球最受欢迎的编程语言之一。

2017 年底Stack Overflow 发布的数据显示,Python 已经超越 JavaScript 成为了该平台上提问流量最多的编程语言。

(二)Jupyter Notebook:从梦想到行业标配

Jupyter Notebook 的诞生源于创始人 Fernando Pérez一个大胆的想法:打造一个能整合 Julia(Ju)、Python(Py)和 R(ter) 这三种科学计算语言的通用计算平台。但目前Jupyter 早已超越最初的设想,成为一个支持几乎所有编程语言的多功能计算环境。

2017 年起,北美顶尖高校纷纷全面拥抱 Jupyter Notebook:

学术界:斯坦福的 CS231N《计算机视觉与神经网络》 课程2017 年便完全迁移到 Jupyter Notebook、UC Berkeley 的 《数据科学基础》 课程也在同年改用 Jupyter 作为唯一的作业平台。

工业界: Facebook尽管大型后端开发仍依赖传统 IDE,但几乎所有 内部分析、机器学习训练和数据探索 都基于 Jupyter Notebook 运行。同时 Google 的 AI Research 部门 Google Brain,也是清一色地全部使用 Jupyter Notebook(改进定制版,叫 Google Colab)。

(三)Mac 上安装 Python 和 Jupyter Notebook 的步骤

步骤命令说明
1. 安装 Homebrew/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Mac 的包管理工具(如果未安装)
2. 安装 Python 3brew install python安装最新的 Python 3
3. 验证 Python 版本python3 --version确保安装成功,显示 Python 3.x.x
4. 安装 Jupyter Notebookpip3 install jupyter通过 pip3 安装 Jupyter
5. 检查 Jupyter 是否可用jupyter --version确保 Jupyter 已正确安装
6. 启动 Jupyter Notebookjupyter notebook打开 Jupyter Notebook,浏览器自动打开

这样,我们就可以在 Mac 上使用 Jupyter Notebook 进行 Python 开发了!

备注:

如果你不习惯也可以直接idea,毕竟这么多年习惯了java开发,我就是两个都安装了,无所谓!

如果不想安装也可以在线使用:Jupyter 官方在线工具

二、Python 基础:变量、数据类型与输入输出

Python 以其 简洁、易读 的语法受到欢迎,而理解变量、数据类型和输入输出是学习 Python 的第一步。这部分内容构成了 Python 编程的基石。这部分代码我写的时候都是直接在idea中,网络版本有时很慢。Jupyter 官方在线工具

(一)变量:数据的存储与引用

变量(Variable)是用于存储数据的容器,在 Python 中变量不需声明类型,直接赋值即可创建。

1. 变量的定义与赋值

x = 10  # 整数变量
name = "Alice"  # 字符串变量
pi = 3.14159  # 浮点数变量
is_python_fun = True  # 布尔变量

Python 是动态类型语言,变量的类型是根据赋值内容自动推导的。

2. 变量命名规则

  • 变量名必须 以字母或下划线(_)开头,不能以数字开头。

  • 变量名只能包含 字母、数字和下划线,不能包含空格或特殊符号。

  • 变量名区分大小写(ageAge 是不同的变量)。

  • 推荐使用 小写字母+下划线snake_case)风格,如 user_name,符合 Python 代码规范(PEP 8)。

示例:正确与错误的变量命名

valid_name = "OK"  # 正确
_valid_123 = 42  # 正确
2nd_value = "wrong"  # ❌ 错误:不能以数字开头
user-name = "error"  # ❌ 错误:不能包含 `-`

(二)数据类型(Data Types)

Python 具有丰富的数据类型,主要包括:

数据类型示例说明
整数(int)x = 42存储整数,如 10, -5, 1000
浮点数(float)pi = 3.14存储小数,如 3.1415, -0.5
字符串(str)name = "Alice"存储文本,如 "hello"
布尔值(bool)is_valid = True只有 TrueFalse
列表(list)nums = [1, 2, 3]有序可变的集合
元组(tuple)colors = ('red', 'blue')有序不可变的集合
字典(dict)person = {"name": "Alice", "age": 25}键值对存储
集合(set)unique_nums = {1, 2, 3}无序不重复元素集合

Python 提供 type() 函数来查看变量的数据类型:

x = 42
print(type(x))  # 输出:<class 'int'>

Python 允许不同类型之间的转换:

age = "25"  
age = int(age)  # 将字符串转换为整数
pi = 3.14
pi_str = str(pi)  # 将浮点数转换为字符串

(三)输入与输出(Input & Output)

1. 标准输入(input)

input() 用于从用户获取输入,所有输入默认是 字符串类型

name = input("请输入你的名字: ")
print("你好,", name)

如果需要数值类型,需要进行 类型转换

age = int(input("请输入你的年龄: "))  # 输入默认是字符串,需要转换成整数
print("你明年就", age + 1, "岁了!")

基本验证:

2. 标准输出(print)

print() 用于向控制台输出内容:

name = "Alice"
age = 25
print("姓名:", name, "年龄:", age)  # 多个参数用逗号分隔

格式化输出(推荐使用 f-string,Python 3.6+ 支持):

print(f"姓名: {name}, 年龄: {age}") # 推荐的写法

✅ 小练习题

尝试自己编写代码练习以下问题:(后面我单独出一篇博客将答案附上)

  1. 定义一个变量 temperature,存储 36.6,并使用 print() 输出 "体温: 36.6 摄氏度"

  2. 编写一个程序,提示用户输入姓名和年龄,并打印 "你好,XX!你今年 YY 岁"(其中 XXYY 由用户输入)。

Python 的变量、数据类型和输入输出构成了编程的基础,熟练掌握这些概念后,就可以进行更复杂的逻辑编写了!

三、控制流:让代码具备决策能力

在编程中,控制流 决定了代码的执行顺序,使程序能够做出决策(条件判断),或重复执行任务(循环)。通过 布尔值、逻辑运算、if 语句、for 和 while 循环,我们可以让 Python 代码变得更加智能和高效。这部分我会总结下这些关键概念,其是构建更具逻辑性程序的基础。

(一)布尔值与逻辑判断

在 Python 中,布尔值(Boolean) 是控制程序逻辑的基础。它用于 条件判断、循环控制和逻辑运算,让代码具备决策能力。

1. 布尔值(Boolean)

布尔值只有两个取值:

True  # 代表 "真"
False  # 代表 "假"

布尔值本质上是整数的特殊形式,其中:

True == 1  # 结果为 True
False == 0  # 结果为 True
布尔值的基本使用
is_python_fun = True
is_raining = Falseprint(is_python_fun)  # 输出:True
print(type(is_python_fun))  # 输出:<class 'bool'>

2. 比较运算符(Comparison Operators)

比较运算符用于比较两个值,返回 TrueFalse

运算符含义示例结果
==等于5 == 5True
!=不等于5 != 3True
>大于10 > 3True
<小于2 < 8True
>=大于等于5 >= 5True
<=小于等于3 <= 2False
代码示例
a = 10
b = 5print(a > b)   # True
print(a == b)  # False
print(a != b)  # True

3. 布尔运算符(Boolean Operators)

Python 提供了 andornot 三种逻辑运算符,用于组合多个布尔表达式。

运算符含义示例结果
and逻辑与(都为 True 时才为 TrueTrue and FalseFalse
or逻辑或(只要一个为 True 就是 TrueTrue or FalseTrue
not逻辑非(取反)not TrueFalse
3.1 and 逻辑与
x = 5
y = 10
print(x > 0 and y > 5)  # True,因为两个条件都成立
print(x > 0 and y < 5)  # False,因第二个条件不成立
3.2 or 逻辑或
x = 5
y = 10
print(x > 0 or y < 5)  # True,只要有一个条件为 True 即可
print(x < 0 or y < 5)  # False,两个条件都为 False
3.3 not 逻辑非
is_python_fun = True
print(not is_python_fun)  # False,因为取反了

4. 混合布尔运算(优先级)

运算符的 优先级 从高到低依次为:not(最高)、and、or(最低)

print(True or False and False)  
# 等价于 True or (False and False) → True or False → Trueprint(not True or False)  
# 等价于 (not True) or False → False or False → False

5. 布尔值与其他数据类型的转换

在 Python 中,所有数据类型 都可以转换为布尔值:

  • 以下情况视为 False

    • 0(整数 0)

    • 0.0(浮点数 0)

    • ""(空字符串)

    • [](空列表)

    • {}(空字典)

    • None(特殊值,表示“空”)

  • 其他情况均为 True

5.1 使用 bool() 进行类型转换
print(bool(0))       # False
print(bool(""))      # False
print(bool([]))      # False
print(bool(42))      # True
print(bool("hello")) # True
5.2 在 if 语句中使用
name = "Alice"if name:  # 相当于 if bool(name) == Trueprint("名字有效")  
else:print("名字为空")

输出:

名字有效

✅ 小练习题

练习 1:布尔运算

判断以下表达式的结果:

  • True and False or True

  • not (False or True)

  • (10 > 5) and (3 != 3)

练习 2:用户输入比较

让用户输入两个数字,比较它们的大小,并输出 "第一个数字更大""第二个数字更大"

# 提示:使用 input() 和 if 语句

布尔值和逻辑判断是 条件判断和循环 的基础,熟练掌握它们后,代码将更加智能化! 🚀

(二)🌟 条件判断(if 语句)

在编程中,我们经常需要根据不同条件来执行不同的代码。这就要用到 条件判断语句(if statement)。Python 中使用 ifelifelse 关键字来实现条件分支。

1. 基本 if 语句

语法结构:

if 条件:语句块

当“条件”为 True 时,语句块才会被执行。

示例:

age = 20if age >= 18:print("你已经成年了")

输出:

你已经成年了

2. if-else 结构(两分支选择)

用于处理“要么这样,要么那样”的情况。

语法结构:

if 条件:语句块1
else:语句块2

示例:

temperature = 15if temperature > 20:print("北京天气今天很暖和")
else:print("北京天气今天有点冷")

输出:

北京天气今天有点冷

3. if-elif-else 结构(多分支选择)

用于处理多个条件判断的情况(相当于“多项选择”)。

语法结构:

if 条件1:语句块1
elif 条件2:语句块2
elif 条件3:语句块3
else:默认语句块

示例:

score = 85if score >= 90:print("优秀")
elif score >= 80:print("良好")
elif score >= 60:print("及格")
else:print("不及格")

输出:

良好

💡 elif 是 "else if" 的缩写。Python 中没有 switch 语句,if-elif-else 是推荐的替代方案。

4. 嵌套 if 语句

嵌套 指的是在一个 if 块内部再写 if 判断。可以用来表示更复杂的逻辑结构。

示例:

age = 25
is_student = Trueif age < 30:if is_student:print("你是年轻的学生")else:print("你是年轻的上班族")

输出:

你是年轻的学生

⚠️ 注意缩进层级,Python 是靠缩进来识别代码块的!

5. 条件表达式(三元运算符)

Python 支持一种简洁的写法:在一行中完成 if-else 判断

语法:

变量 = 值1 if 条件 else 值2

示例:

age = 16
status = "成年" if age >= 18 else "未成年"
print(status)

输出:

未成年

适合用于 根据条件选择一个值赋给变量 的情况。

✅ 小练习题

练习 1:分数等级判断器

让用户输入一个 0~100 的整数,判断其属于哪个等级:

  • 90 以上:优秀

  • 80~89:良好

  • 70~79:中等

  • 60~69:及格

  • 低于 60:不及格

  • 其他情况提示“输入有误”

练习 2:三角形合法性判断

输入三条边的长度,判断是否能组成一个三角形(任意两边之和大于第三边),并进一步判断:

  • 是等边三角形

  • 是等腰三角形

  • 是普通三角形

  • 否则输出“不合法的三角形”

练习 3:模拟 ATM 登录与权限检查(嵌套)

假设用户名为 admin,密码为 8888,登录成功后再检查是否为管理员(管理员输入 "yes" 才能继续操作)。

练习 4:三元运算小测试

输入一个数字,输出 "正数""负数""零"用三元运算符 实现。

🧠 小结

类型场景示例
if只有一个条件
if-else两种可能,二选一
if-elif-else多种情况,依次判断
嵌套 if条件套条件,多层判断
三元表达式简洁地赋值,适合一行判断

(三)循环(Loops)

在编程中,我们常常需要重复执行某些操作,比如遍历列表、处理每一行数据、执行某个动作直到满足条件等等。Python 提供了两种主要的循环结构:while 循环和 for 循环,配合控制语句(如 breakcontinue)可以构建出丰富的循环逻辑。

1. while 循环(基于条件重复执行)

✅ 基本语法
while 条件表达式:循环体
  • 每次循环前都会检查“条件表达式”的值;

  • 条件为 True → 执行循环体;

  • 条件为 False → 结束循环。

🧪 示例:打印 1 到 5 的数字
i = 1
while i <= 5:print(i)i += 1
🔁 break 语句(提前终止循环)

break 用于立即跳出整个循环结构,不管循环条件是否还为 True

i = 1
while True:print(i)if i == 3:breaki += 1

输出:1, 2, 3,然后退出循环

🔁 continue 语句(跳过当前迭代)

continue 用于跳过本次循环中剩下的语句,直接进入下一次判断。

i = 0
while i < 5:i += 1if i == 3:continueprint(i)

输出:1, 2, 4, 5(跳过了 3)

2. for 循环(用于遍历序列)

✅ 基本语法
for 变量 in 可迭代对象:循环体

可迭代对象包括:字符串、列表、字典、集合、元组等。

🔁 遍历字符串
for ch in "hello":print(ch)
🔁 遍历列表
fruits = ['apple', 'banana', 'orange']
for fruit in fruits:print(fruit)
🔁 遍历字典
info = {"name": "Tom", "age": 20}
for key in info:print(key, "=>", info[key])

或使用 .items() 遍历键值对:

for key, value in info.items():print(f"{key}: {value}")
🔁 遍历集合
s = {"apple", "banana", "cherry"}
for item in s:print(item)
🔁 range() 函数与数值循环
for i in range(1, 6):print(i)
  • range(n):0 到 n-1

  • range(start, end):start 到 end-1

  • range(start, end, step):按步长生成

🔁 enumerate() 结合索引遍历

想同时获取元素和下标时使用 enumerate()

colors = ['red', 'green', 'blue']
for index, color in enumerate(colors):print(f"{index}: {color}")

3. 循环控制语句

break:提前终止整个循环

通常与 if 配合使用,用于在满足某个条件时立即退出循环。

for i in range(1, 10):if i == 5:breakprint(i)
continue:跳过当前迭代

用于跳过某些不符合条件的值。

for i in range(1, 6):if i % 2 == 0:continueprint(i)  # 输出 1 3 5(跳过偶数)
else 语句在循环中的作用

else 可以与 forwhile 循环一起使用:

  • 当循环没有被 break 中断时,else 中的语句会执行。

    for i in range(1, 5):if i == 10:break
    else:print("未被 break,循环正常结束")
    

    这在处理搜索类问题时特别有用:

    nums = [1, 3, 5, 7]
    target = 4
    for num in nums:if num == target:print("找到目标")break
    else:print("未找到目标")
    

✅ 小结

循环类型用途特点
while条件控制循环不确定次数时使用
for遍历序列更简洁,适合固定结构
break跳出循环终止整个循环体
continue跳过本次迭代继续下一轮
else循环结构补充仅在循环未被 break时执行

✅ 小练习题

🧪 练习题 1:打印 1~100 中所有能被 7 整除的数
🧪 练习题 2:使用 while 计算从 1 累加到 n 的和(n 由用户输入)
🧪 练习题 3:找出列表中第一个大于 50 的元素,并输出其值和索引
🧪 练习题 4:输出 1~30 中除了能被 3 整除的数(使用 continue)
🧪 练习题 5:统计一段字符串中元音字母的个数(不区分大小写)
🧪 练习题 6:使用 forelse 实现一个猜数字小游戏

四、🧩 函数与相关基础知识:让代码会“思考”的魔法工具

在编程的世界里,函数就像是程序的“积木”:它们能把一段可复用的操作封装起来,想用就调用,修改也方便,堪称优雅代码的起点。

无论是打印一行文字,计算一个数列的和,还是训练一个 AI 模型,本质上你做的都是“定义功能 + 调用功能” —— 这正是函数的使命。

(一)函数基础

1. 什么是函数?为什么要使用函数?

在编程中,函数是一个非常重要的概念,它可以被理解为“功能块”,用来封装一段代码,供其他地方调用。通过函数,开发者可以:

  • 提高代码复用性:避免重复写相同的代码,简化开发和维护。

  • 增强可读性:将复杂的任务拆解成小的、独立的单元,便于理解。

  • 分隔逻辑:函数让代码的逻辑结构更加清晰和模块化,有助于团队协作开发。

例如,我们可以定义一个函数来计算两个数字的和,而不需要每次都重复写加法的操作。只要定义一次,后续就可以随时调用。

2. 使用 def 定义函数

在 Python 中,函数是通过 def 关键字来定义的。它的基本语法如下:

def function_name(parameters):# 函数体return result
  • def 是 Python 中定义函数的关键字

  • function_name 是你给函数命名的名称,符合命名规则

  • parameters 是函数的输入(可以没有)

  • return 是返回结果的关键字(如果不返回任何值,则默认为 None

示例:一个简单的加法函数
def add(a, b):return a + b# 调用函数
result = add(3, 5)
print(result)  # 输出: 8

这里我们定义了一个 add 函数,输入参数是 ab,它们会被加在一起并返回结果。

3. 函数的调用和执行流程

定义函数后,调用函数就能执行该函数的代码。Python 会根据函数调用的顺序进入函数体,并执行其中的代码。

  • 当函数被调用时,程序会暂停当前位置,跳转到函数体执行代码,直到遇到 return 语句(或者函数执行完毕)才返回。

  • 如果没有 return 语句,则返回 None

示例:简单的函数调用与返回值
def greet(name):return f"Hello, {name}!"message = greet("Alice")
print(message)  # 输出: Hello, Alice!

这里的 greet 函数通过 return 语句返回了一个字符串,调用时传入了参数 "Alice",最终返回 "Hello, Alice!"

4. print()return 的区别与使用场景

在 Python 中,print()return 都用于输出数据,但它们有显著的不同:

  • print() 用于将信息输出到控制台,主要用于调试、输出中间结果或与用户交互。

  • return 用于函数的输出,它将值返回给调用者,可以被其他代码再次使用

示例:print()return 对比
# 使用 print()
def greet_print(name):print(f"Hello, {name}!")greet_print("Alice")  # 输出: Hello, Alice!# 使用 return
def greet_return(name):return f"Hello, {name}!"message = greet_return("Alice")
print(message)  # 输出: Hello, Alice!
  • greet_print 使用 print() 输出值,但无法把它传递给其他部分的代码。

  • greet_return 使用 return 返回结果,这个返回值可以在代码的其他地方使用或存储。

小结一下吧

  • 函数是代码复用、模块化的核心工具。

  • 使用 def 定义函数,return 返回值。

  • print() 用于输出调试信息,return 用于返回计算结果。

(二)函数参数

函数参数是函数接收外部输入的方式。理解和掌握函数参数的使用,不仅能帮助你编写更灵活的代码,还能让你的程序更具扩展性和可维护性。

1. 位置参数

位置参数是最常见的函数参数类型,它是指参数传递时位置的顺序决定了每个参数的含义。

例如,在函数定义时,参数 ab 的位置决定了它们的意义。当调用函数时,传递的参数值会根据位置匹配到相应的参数。

示例:位置参数
def add(a, b):return a + bresult = add(3, 5)  # 位置参数:3 被赋值给 a,5 被赋值给 b
print(result)  # 输出: 8

这里的 add 函数有两个位置参数:ab。我们调用 add(3, 5) 时,3 会赋值给 a5 会赋值给 b,最终返回它们的和。

2. 关键字参数

关键字参数允许你在调用函数时显式地指定每个参数的名称。这样可以不关心参数的顺序,只需要知道参数名。

示例:关键字参数
def greet(name, age):return f"Hello, {name}! You are {age} years old."message = greet(age=25, name="Alice")  # 参数顺序不重要
print(message)  # 输出: Hello, Alice! You are 25 years old.

在调用 greet 函数时,agename 的顺序不再重要,关键字参数通过指定 age=25name="Alice" 来传递值。

3. 默认参数

默认参数是指在定义函数时,为某些参数提供默认值。如果调用时没有提供这些参数的值,Python 会使用默认值。

示例:默认参数
def greet(name, age=18):  # age 有默认值return f"Hello, {name}! You are {age} years old."message1 = greet("Alice")  # 调用时没有提供 age,使用默认值
message2 = greet("Bob", 30)  # 调用时提供了 age,覆盖默认值print(message1)  # 输出: Hello, Alice! You are 18 years old.
print(message2)  # 输出: Hello, Bob! You are 30 years old.

greet 函数中,age 有默认值 18。如果调用时没有传入 age,就会使用默认值;如果传入了 age,则会覆盖默认值。

4. 可变参数:*args**kwargs

有时候我们不知道函数需要接收多少个参数,这时可以使用 可变参数

  • *args 用于接收位置参数,它将接收多余的位置参数并将其打包成一个元组。

  • **kwargs 用于接收关键字参数,它将接收多余的关键字参数并将其打包成一个字典。

示例:*args**kwargs
def example(*args, **kwargs):print("args:", args)print("kwargs:", kwargs)# 调用函数时传入不同数量的参数
example(1, 2, 3, name="Alice", age=25)# 输出:
# args: (1, 2, 3)
# kwargs: {'name': 'Alice', 'age': 25}
  • *args 将所有位置参数(1, 2, 3)打包成一个元组 (1, 2, 3)

  • **kwargs 将所有关键字参数(name="Alice", age=25)打包成一个字典 {'name': 'Alice', 'age': 25}

5. 参数顺序规范

当一个函数同时使用位置参数、默认参数和可变参数时,有一定的顺序规范,必须遵循以下顺序:

  • 位置参数

  • 默认参数

  • *args

  • **kwargs

示例:参数顺序
def function(a, b=2, *args, c, **kwargs):print(a, b, args, c, kwargs)# 调用时,按照顺序传递参数
function(1, c=3, d=4, e=5)
# 输出: 1 2 () 3 {'d': 4, 'e': 5}
  • a 是位置参数,必须最先提供。

  • b 是默认参数,如果不提供则使用默认值。

  • *args 用于接收多余的所有位置参数。

  • c 是一个关键字参数,调用时必须显式指定。

  • **kwargs 用于接收多余的所有关键字参数。

小结一下吧

  • 位置参数:根据参数顺序传递值。

  • 关键字参数:显式指定参数名和值。

  • 默认参数:函数定义时为参数提供默认值。

  • 可变参数:*args 用于接收多位置参数,**kwargs 用于接收多关键字参数。

  • 参数顺序:位置参数 > 默认参数 > *args > **kwargs

(三)函数返回值

在 Python 中,函数不仅可以执行某些操作,还可以将结果“返回”给调用者。这就是 返回值(Return Value) 的概念。

通过 return 语句,函数可以把处理的结果交给外部使用。如果函数没有 return,那它默认返回的是 None

1. 使用 return 返回结果

基本语法:

def function_name(...):...return result

示例:

def square(x):return x * xresult = square(5)
print(result)  # 输出: 25

函数 square 返回的是 x 的平方,调用后我们可以拿到这个结果并继续使用。

2. 返回多个值(元组)

Python 支持从一个函数中返回多个值,这些值实际上被打包成一个元组返回。

示例:

def get_name_and_age():name = "Alice"age = 30return name, agen, a = get_name_and_age()
print(n)  # Alice
print(a)  # 30

多值返回的本质是:return name, age 等价于 return (name, age),然后通过拆包语法接收。

3. 函数无返回值时的表现

如果函数中没有 return 语句,或者只是 return 而没有值,那默认返回的是 None

示例:

def say_hello():print("Hello!")result = say_hello()
print(result)  # 输出: None

这个函数 say_hello() 虽然做了事情(打印),但没有 return,因此返回值是 None

4. 提前终止函数执行

return 不仅能返回值,还能用来提前终止函数的执行

示例:

def divide(a, b):if b == 0:return "除数不能为 0"return a / bprint(divide(10, 0))  # 输出: 除数不能为 0
print(divide(10, 2))  # 输出: 5.0

b 是 0 时,函数遇到第一个 return 后立即终止执行,不会继续往下运行。

5. 将返回值作为表达式使用

函数返回值可以被用在其他表达式或函数中,像这样:

def add(a, b):return a + bprint(add(2, 3) * 10)  # 输出: 50

add(2, 3) 会返回 5,然后再与 10 相乘。

小结一下吧

内容示例返回值说明
返回单个值return x返回一个对象
返回多个值return x, y返回一个元组
无 return 或 return Nonereturn / 无 return返回 None
提前结束函数if ...: return ...直接退出函数
返回值可以参与表达式add(1, 2) * 3函数结果用于计算

五、📚 字符串操作模块

在 Python 中,字符串(str)是最常用、最重要的数据类型之一。无论你是在处理用户输入、读取文件、构建网页内容、分析文本数据,几乎都绕不开对字符串的处理。

现在我们总结掌握 Python 字符串的各种操作方法,从最基本的创建与访问,到复杂的格式化与正则匹配,覆盖日常开发中 90% 的高频场景。我们需要学会如何清洗、切割、替换、判断和重组字符串,并为后续的数据处理与文本分析打下坚实基础。

(一)📘 字符串基础

在 Python 中,字符串(str)是用来表示文本的数据类型。本部分介绍字符串的创建方式、基本特性、访问技巧以及常见的基本操作。

1. 字符串的定义与创建

字符串可以用 单引号 '双引号 "三引号 ''' / """ 括起来。

# 单引号
s1 = 'hello'# 双引号
s2 = "world"# 三引号(支持多行)
s3 = '''This is
a multi-line
string.'''

✔️ Python 中单引号和双引号作用相同,主要用于避免转义冲突。

2. 字符串是不可变对象

字符串是 不可变的(immutable):创建后无法修改,只能重新赋值。

s = "hello"
# s[0] = 'H'  # ❌ 错误!字符串不能直接修改
s = "Hello"   # ✅ 只能重新赋值

3. 字符串的索引与切片

字符串可以看作字符的序列,可以通过索引或切片访问其部分内容。

s = "Python"# 索引(从 0 开始)
print(s[0])   # P
print(s[-1])  # n(最后一个字符)# 切片 [start:end:step]
print(s[0:2])     # Py(不包括 end)
print(s[::2])     # Pto(每隔1个)
print(s[::-1])    # nohytP(反转字符串)

✅ 切片非常强大,是字符串处理中不可或缺的工具。

4. 字符串的连接与重复

# 拼接字符串
a = "Hello"
b = "World"
c = a + " " + b
print(c)  # Hello World# 重复字符串
print("ha" * 3)   # hahaha

5. 字符串的成员运算

s = "python"
print("p" in s)      # True
print("z" not in s)  # True

6. 字符串与类型转换

num = 123
text = str(num)  # 数字转字符串
print("数字是:" + text)# 也可以使用 f-string(推荐)
print(f"数字是:{num}")

🧠 小结

操作类型常用方法 / 语法
创建字符串'abc', "abc", '''abc'''
索引s[0], s[-1]
切片s[1:4], s[::-1]
拼接与重复+, *
判断是否存在in, not in
类型转换str(x), f"{x}"

(二)📘 字符串常见操作方法

Python 的字符串类型(str)内建了大量实用的方法,帮助我们完成查找、替换、对齐、大小写转换、格式化等各类文本处理任务。本节将系统讲解所有主流、实用的方法,并配合用例说明。

1. 大小写转换

方法作用
.lower()转为小写
.upper()转为大写
.capitalize()首字母大写,其余小写
.title()每个单词首字母大写
.swapcase()大小写互换
s = "hello World"
print(s.lower())       # hello world
print(s.upper())       # HELLO WORLD
print(s.capitalize())  # Hello world
print(s.title())       # Hello World
print(s.swapcase())    # HELLO wORLD

2. 查找与判断

方法功能
.find(sub)找到子串首次出现的位置(找不到返回 -1)
.rfind(sub)从右侧开始查找
.index(sub)与 find 类似,但找不到抛出异常
.startswith(prefix)是否以某前缀开头
.endswith(suffix)是否以某后缀结尾
.in判断子串是否存在
s = "hello python"
print(s.find("py"))       # 6
print(s.startswith("he")) # True
print(s.endswith("on"))   # True
print("py" in s)          # True

3. 删除空白符与字符清洗

方法功能
.strip()删除两端空白符
.lstrip()删除左侧空白符
.rstrip()删除右侧空白符
.replace(old, new)替换子串
s = "  hello world  "
print(s.strip())     # "hello world"s2 = "python,java,c"
print(s2.replace(",", " | "))  # python | java | c

4. 字符串对齐与填充

方法说明
.center(width, char)居中填充
.ljust(width, char)左对齐填充
.rjust(width, char)右对齐填充
.zfill(width)用 0 填充左侧数字部分
print("hi".center(10, "-"))  # ---hi-----
print("hi".ljust(10, "."))   # hi........
print("hi".rjust(10, "*"))   # ********hi
print("42".zfill(5))         # 00042

5. 拆分与连接

方法功能
.split(sep)拆分为列表
.rsplit(sep)从右拆分
.splitlines()拆分多行字符串
'sep'.join(list)用分隔符连接列表为字符串
s = "apple,banana,grape"
print(s.split(","))         # ['apple', 'banana', 'grape']lines = "line1\nline2\nline3"
print(lines.splitlines())   # ['line1', 'line2', 'line3']words = ['one', 'two', 'three']
print("-".join(words))      # one-two-three

6. 内容判断类方法(返回布尔值)

方法判断类型
.isalpha()是否全字母
.isdigit()是否全数字
.isalnum()是否全是字母或数字
.isspace()是否全是空白符
.isupper()是否全为大写
.islower()是否全为小写
.istitle()是否符合标题规范(首字母大写)
print("abc".isalpha())     # True
print("123".isdigit())     # True
print("abc123".isalnum())  # True
print("   ".isspace())     # True

7. 高级字符串格式化(f-string)

name = "Alice"
age = 30# 推荐方式:f-string(Python 3.6+)
print(f"{name} is {age} years old.")  # Alice is 30 years old# 老式:format()
print("{} is {} years old.".format(name, age))# 占位对齐控制
print(f"|{name:^10}|{age:>3}|")  # 居中+右对齐

8. 转义字符与原始字符串

字符含义
\n换行
\t制表符
\\反斜杠
r""原始字符串,不转义
print("hello\nworld")     # 换行
print(r"c:\new\folder")   # c:\new\folder

9. 其他实用技巧

  • 长字符串拼接:

    s = ("This is a very long string ""split across multiple lines ""but still valid."
    )
    
  • 字符串比较支持 <, >, == 等字典序对比:

    print("apple" < "banana")  # True

🧠 小结:常用字符串方法分类对照表

类型常用方法
查找判断find(), startswith(), in
修改清洗strip(), replace()
大小写处理lower(), capitalize()
对齐填充center(), zfill()
格式化f"", format()
判断内容isdigit(), isalpha()
分割拼接split(), join()
其他len(), 转义、比较等

(三)📘 字符串切片与索引

1. 字符串索引(正向索引 / 负向索引)

Python 字符串是序列类型,每个字符都有对应的索引位置。我们可以通过索引访问字符串中的单个字符。

📍 正向索引(从 0 开始)
s = "python"
print(s[0])  # p
print(s[1])  # y
print(s[5])  # n
字符python
索引012345
📍 负向索引(从 -1 开始,表示从右往左)
s = "python"
print(s[-1])  # n
print(s[-2])  # o
print(s[-6])  # p
字符python
索引-6-5-4-3-2-1

🧠 注意

  • 超出索引范围(如 s[10])会抛出 IndexError

  • 字符串是 不可变对象,不能通过索引修改某个字符。

2. 字符串切片([start:stop:step])

切片(slice)是从字符串中提取子串的一种方式,语法格式为:

s[start : stop : step]
  • start:起始索引(包含)

  • stop:终止索引(不包含)

  • step:步长(默认为 1)

🎯 基础切片
s = "Hello, Python!"print(s[0:5])   # Hello
print(s[7:13])  # Python
print(s[:5])    # Hello(从头开始)
print(s[7:])    # Python!(直到结尾)
🎯 使用负数索引切片
s = "abcdefg"
print(s[-4:-1])  # def
print(s[-7:-4])  # abc
🎯 添加步长(step)
s = "0123456789"
print(s[::2])     # 02468(每两个字符取一个)
print(s[1::3])    # 147(从索引 1 开始,每隔 3 个取)
🎯 反向切片(步长为负数)
s = "abcdef"
print(s[::-1])   # fedcba(字符串反转)
print(s[-1:-7:-1]) # fedcba(等同上行)
🧠 切片边界记忆口诀
  • 包头不包尾:起始位置包含,结束位置不包含。

  • 步长方向一致:正数步长从左到右,负数步长从右到左。

  • 索引可以为负:负索引从末尾向前数。

3. 字符串的遍历

遍历字符串可以逐个访问其字符,常用于统计、查找、生成新字符串等任务。

🎯 基础遍历
s = "hello"
for c in s:print(c)

输出:

h
e
l
l
o
🎯 带索引遍历(推荐:使用 enumerate)
s = "hello"
for index, char in enumerate(s):print(f"{index} -> {char}")

输出:

0 -> h
1 -> e
2 -> l
3 -> l
4 -> o

🔎 经典应用场景小结

场景示例
提取子串s[3:7]
字符串反转s[::-1]
判断回文s == s[::-1]
截取前缀/后缀s[:3]s[-3:]
每隔一个字符取s[::2]

(四)📘 字符串格式化

Python 提供了三种主要的字符串格式化方式:

  • % 占位符格式化(经典写法)

  • str.format() 方法格式化(兼容写法)

  • f-string 格式化(推荐方式,Python 3.6+)

1.% 占位符格式化(C 风格)

这是最早期的格式化方式,语法类似于 C 语言:

name = "Alice"
age = 25
print("My name is %s and I am %d years old." % (name, age))
占位符含义
%s字符串
%d整数
%f浮点数(默认小数点后 6 位)
%.2f浮点数保留 2 位小数

🧠 缺点:可读性差、容易出错,不推荐用于新代码。

2.str.format() 方法格式化

引入于 Python 2.7 / 3.0,支持位置参数、关键字参数,更灵活:

name = "Alice"
age = 25
print("My name is {} and I am {} years old.".format(name, age))
🎯 支持 位置参数 / 关键字参数
print("Hello, {0}. You are {1}.".format("Bob", 30))
print("Hello, {name}. You are {age}.".format(name="Bob", age=30))
🎯 支持格式控制
pi = 3.1415926
print("Pi is {:.2f}".format(pi))  # Pi is 3.14

🧠 缺点:写法较冗长,推荐 f-string 替代。

3.f-string 格式化(Python 3.6+,推荐✅)

最现代、最简洁的格式化方式,代码更清晰,推荐作为首选写法。

name = "Alice"
age = 25
print(f"My name is {name} and I am {age} years old.")
🎯 支持表达式
a = 5
b = 3
print(f"{a} + {b} = {a + b}")
🎯 支持格式化控制
pi = 3.1415926
print(f"Pi rounded to 2 digits: {pi:.2f}")
🎯 与函数、数据结构结合
user = {"name": "Bob", "score": 88}
print(f"{user['name']} scored {user['score']}")

🧪 三种方式对比

特性% 格式化str.format()f-string
可读性✅✅✅
功能强大一般✅✅✅✅✅
写法简洁一般✅✅✅
推荐程度❌ 不推荐✅ 过渡用法✅✅✅ 首选

📝 小结一下吧

  • 新代码推荐 f-string,语法简洁、表达能力强。

  • str.format() 适用于兼容旧版本 Python。

  • % 占位符方式适合了解,不建议用于正式项目中。


🎯 想练点格式化相关的习题?还是我们继续进入 第 5 节 字符串常用方法详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89807.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89807.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/89807.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「Java案例」鸡兔同笼问题

案例解析 鸡兔同笼求解 《孙子算经》是中国古代重要的数学著作&#xff0c;成书于南北朝时期&#xff0c;其中就记载了一个有趣的问题&#xff1a;鸡和兔在同一个笼子里&#xff0c;鸡和兔共有n条腿&#xff0c; m个头&#xff0c;问鸡和兔各有多少只&#xff1f;编写一个程序…

BLDC电机-运动控制---stm32时钟树定时器SYSTICKRTC的学习

一、时钟树 二、基本定时器 三、通用定时器 四、高级定时器 五、SYSTICK 六、RTC

Implementing a User-Defined Preconditioner in PETSc

文章目录Implementing a User-Defined Preconditioner in PETScBasic ApproachExample ImplementationUsing Your PreconditionerAdvanced OptionsImportant NotesUsing PCShell to Implement User-Defined Preconditioners in PETScBasic Implementation StepsAdvanced Featur…

DotNetBrowser 3.3.0 版本发布啦!

#Chromium 137 安全修复一次调用即可下载 URL更新了 Widevine APIDOM 元素绝对边界 &#x1f517; 点击此处了解更多详情。 &#x1f193; 获取 30 天免费试用。

Android-自定义View的实战学习总结

一、自定义View歌词界面LrcView 类-->自定义的歌词视图1. 构造函数和属性初始化自定义 View 通常需要提供多个构造函数以支持不同的初始化方式。在 LrcView 中&#xff0c;提供了四个构造函数&#xff0c;最终调用 super 父类构造函数完成初始化&#xff0c; context.obtain…

Maven 在 Eclipse 中的使用指南

Maven 在 Eclipse 中的使用指南 概述 Maven 是一个强大的构建自动化工具,用于项目管理和构建。它简化了项目构建、依赖管理和项目报告等任务。Eclipse 是一个流行的集成开发环境(IDE),支持多种编程语言,包括 Java。本文将详细介绍如何在 Eclipse 中使用 Maven 进行项目管…

zxing去白边

2025年了&#xff0c;可能干不了几年了&#xff0c;还能写这种文章还是有点可笑。 背景 zxing库生成的二维码自带白边 分析 生产二维码主要分两步&#xff1a; 1.用QRCodeWriter生成BitMatrix信息 2.根据信息生成bitmap 问题在1。 生成二维码的尺寸实际是有一些规格的&a…

Linux操作系统之文件(三):缓冲区

前言&#xff1a; 上节课我们讲授重定向的概念时&#xff0c;曾提到了一点缓冲区的概念。本文将会为大家更详细的带来缓冲区的有关内容&#xff1a;用户级缓冲区是什么&#xff0c;以及其与内核级缓冲区的关系&#xff0c;最后&#xff0c;我会为大家模拟实现一下stdio.h的关于…

Linux云计算基础篇(7)

一、< 输入重定向 wc -l < filelist .txt 统计数据&#xff0c;从file这个文件拿结果。 二、tr 转换字符命令 $ tr A-Za-z<.bash_profile 将bash_profile文件中的大写字符全部转成小写字符 三、管道符&#xff08;|&#xff09; com…

【学习笔记】Lean4基础 ing

文章目录 概述参考文档运行程序elan 命令行工具lean 命令行工具lake 命令行工具运行单文件程序Hello, world!验证 Lean4 证明 运行多文件项目 Lean4 基础语法注释表达式求值变量和定义定义类型变量 定义函数命名规则命名空间数据类型结构体构造子模式匹配多态List 列表Option 可…

FPGA实现40G网卡NIC,基于PCIE4C+40G/50G Ethernet subsystem架构,提供工程源码和技术支持

目录 1、前言工程概述免责声明 3、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的以太网方案 4、工程详细设计方案工程设计原理框图测试用电脑PClE4CDMA40G/50G Ethernet subsystem工程源码架构驱动和测试文件 5、Vivado工程详解1详解&a…

SAP从入门到放弃系列之流程管理概述

文章目录前言1.Process Management&#xff08;过程管理&#xff09;2.关键术语2.1Control recipe destination2.2 Process instruction characteristic2.3 Process message characteristic2.4 Process instruction category2.5 Process message category2.6 PI sheet3.关键配置…

RCLAMP0554S.TCT升特Semtech 5通道TVS二极管,0.5pF+20kV防护,超高速接口!

RCLAMP0554S.TCT&#xff08;Semtech&#xff09;产品解析与推广文案 一、产品定位 RCLAMP0554S.TCT是Semtech&#xff08;升特半导体&#xff09;推出的5通道超低电容TVS二极管阵列&#xff0c;专为超高速数据接口&#xff08;USB4/雷电4/HDMI 2.1&#xff09;提供静电放电&a…

【人工智能】DeepSeek的AI实验室:解锁大语言模型的未来

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 DeepSeek作为中国AI领域的先锋,以其开源大语言模型(LLM)DeepSeek-V3和DeepSeek-R1在全球AI研究中掀起波澜。本文深入探讨DeepSeek AI实验…

nacos+nginx动态配置大文件上传限制

前言 今天还要跟大家分享的一个点就是微服务网关gateway用webflux响应式不用servlet后&#xff0c;引发的一个忽略点差点在演示的时候炸锅&#xff0c;也不多讲废话&#xff0c;说说现象&#xff0c;说说处理就了事。 一、上传超过20MB的视频报错 配置在nacos里&#xff0c;读…

mr 任务运行及jar

mainclass如下&#xff1a;LoggingDriver

Python 数据分析:numpy,抽提,整数数组索引与基本索引扩展(元组传参)。听故事学知识点怎么这么容易?

目录1 代码示例2 欢迎纠错3 论文写作/Python 学习智能体------以下关于 Markdown 编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右Sm…

ECU开发工具链1.10版:更强大的测量、校准与数据分析体验.

汽车电子开发与测试领域&#xff0c;高效、精准且安全的工具是成功的基石。DiagRA X 作为一款广受认可的 Windows 平台综合解决方案&#xff0c;持续引领行业标准。其最新发布的 1.10 版本带来了显著的功能增强与用户体验优化&#xff0c;进一步巩固了其在 ECU 测量、校准、刷写…

Qt C++串口SerialPort通讯发送指令读写NFC M1卡

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bVIuGpf&ftt&id18645495882 一、确定已安装Qt Serial Port组件 二、在.pro项目文件声明引用Serialport组件 三、在.h头文件内引用Serialport组件 四、在.cpp程序中实…

Go 语言开发中用户密码加密存储的最佳实践

在现代 Web 应用开发中&#xff0c;用户密码的安全存储是系统安全的重要环节。本文将结合 Go 语言和 GORM 框架&#xff0c;详细介绍用户密码加密存储的完整解决方案&#xff0c;包括数据库模型设计、加密算法选择、盐值加密实现等关键技术点。 一、数据库模型设计与 GORM 实践…