ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Python的基础入门学习笔记

Python的基础入门学习笔记

1.环境搭建与IDE配置(venv/uv)

1.1 venv和uv的区别

venv 是 Python 标准库自带的虚拟环境工具,为每个项目复制一份独立的解释器目录与第三方包目录;uv 是用 Rust 编写的高性能 Python 版本与包管理器,能用更少的命令、更快的速度完成同样的事。

1.2 venv创建虚拟环境总流程

1.确认解释器版本(Windows 用 python 或 py -3;macOS / Linux 用 python3)
python --version

我用的是python3.13.11

2.建项目目录并进入
mkdir todo-app && cd todo-app

在pycharm里面需要分成两次输入,不然会报错

3.用标准库 venv 创建虚拟环境:生成 .venv 目录,无输出即成功
python -m venv .venv

4.激活环境(激活成功后命令行提示符前出现 (.venv))
Windows PowerShell:
.venv\Scripts\Activate.ps1
Windows CMD:
.venv\Scripts\activate.bat
macOS / Linux:
source .venv/bin/activate

5.激活后再装包,只影响当前 .venv
python -m pip install requests

6.退出当前虚拟环境
deactivate

1.3 uv创建虚拟环境

1.uv 等价流程:不用手动 activate,uv run 会自动使用 .venv 里的解释器

uv venv # 等价于 python -m venv .venv,速度快得多
2.uv pip install requests # 等价于激活后的 pip install
3.uv run python main.py # 无需激活,直接在该环境里执行脚本
4.uv python list # 查看本机可用 / 可下载的 Python 版本

2.核心语法、数据类型与运算符

2.1 变量的基本使用

2.1.1标识符

第一个字符必须以字母(a-z, A-Z)或下划线 _ 。

标识符的其他的部分由字母、数字和下划线组成。

标识符对大小写敏感,count 和 Count 是不同的标识符。

标识符对长度无硬性限制,但建议保持简洁(一般不超过 20 个字符)。

禁止使用保留关键字,如 if、for、class 等不能作为标识符

2.1.2注释

Python中单行注释以#开头,还有一个快捷键ctrl+/,多行注释"""(内容)"""

2.2数据类型的基本分类

2.2.1标准数据类型

1.不可变数据(4 个):Number(数字)、String(字符串)、bool(布尔)、Tuple(元组)

2.可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)

2.3运算符

2.3.1算术运算符

+加-减*乘/除//整除%取余(模运算)**幂运算

2.3.2比较运算符

==等于!=不等于>大于<小于 ​​​​​​​>=大于等于<=小于等于

2.3.3逻辑运算符

and与 ​​​​​​​or或not非

2.3.4赋值运算符

+=加后赋值 ​​​​​​​-=减后赋值 ​​​​​​​*=乘后赋值 ​​​​​​​/=除后赋值 ​​​​​​​//=整除后赋值 ​​​​​​​ ​​​​​​​%=取余后赋值**=幂后赋值

2.3.5成员运算符

in在……之中not in不在……之中

2.3.6身份运算符

is是同一个对象is not不是同一个对象

2.4数据类型转换

有时候,我们需要对数据内置的类型进行转换,数据类型的转换,一般情况下你只需要将数据类型作为函数名即可。

Python 数据类型转换可以分为两种:

1.隐式类型转换 - 自动完成:较低数据类型(整数)就会转换为较高数据类型(浮点数)

2.显式类型转换 - 需要使用类型函数来转换:需要用户将对象的数据类型转换为所需的数据类型

2.5分支语句

2.6 for循环语句

迭代循环,用于遍历序列或可迭代对象,可以

2.7while循环

基本格式:

如果 while 后面的条件语句为 false 时,则执行 else 的语句块。

语法格式如下:

while <expr>: <statement(s)> else: <additional_statement(s)>

2.8 isdigit() 与 isinstance()对比

对比项isdigit()isinstance()
类型字符串的方法Python内置函数
调用方式字符串.isdigit()isinstance(对象, (类型,...))
作用对象只能对字符串调用可以判断任何类型的对象
判断内容判断字符串内容是否全由数字字符组成(即"长得像不是纯整数")判断对象是否属于指定的某类/某几类类型
返回结果布尔值True/False布尔值True/False
能否判断整数✅(如"123")✅(如123)
能否判断浮点数❌("3.14"→ False)✅(若写了float)
能否判断负数❌("-5"→ False)✅(若写了int/float)
判断对象还是内容判断字符串内容判断对象的数据类型
典型应用校验用户输入的字符串是否为纯数字检查变量是否为某类型,做分支处理
支持类型继承不涉及✅ 支持(子类也算)
b = isinstance(num, (int, float, str))

这里的isinstance用于判断num这个变量本身是否属于int、float、str这三种类型中的某一种。

  • 如果num = 5→b = True

  • 如果num = 3.14→b = True

  • 如果num = "123"→b = True(因为包含str)

  • 如果num = [1,2]→b = False

关键区别一句话:

  • isdigit()看"长相":这个字符串看起来是不是一串数字字符。

  • isinstance()看"身份":这个变量本质上属于什么类型。

注意:isinstance(num, (int, float, str))把str也放进去了,所以字符串也会返回True。如果你本意是判断"是不是数字",就不应该包含str,写(int, float)更合适。而isdigit()只能用在字符串上,用来判断字符串内容是不是数字。

2.9 for和while循环的区别

对比项for循环while循环
循环次数固定/可数,遍历某个序列(列表、字符串、range等)不确定,只要条件成立就一直循环
条件依赖依赖"还有没有下一个元素"依赖"条件是否为真"
是否必须手动更新不需要,自动取下一个必须在循环体里手动改变条件变量(否则死循环)
适用场景"我要循环N次" 或 "遍历每个元素""我要循环直到某个条件不再成立"
何时进循环进入时就知道要循环多少次每次执行前才判断条件

能用for就用for:遍历列表、字符串、range(n)固定次数时,更简洁、不易出错。

必须用while的情况:循环次数无法预知,只能靠条件判断。典型例子——让用户一直输入,直到输入"quit"才退出。

3.break和continue的使用

都可以用在while和for循环里

continue:跳过本次循环,执行下次循环

语法格式:

for item in iterable: if 跳过条件: continue # 处理代码

break:结束本次循环

for item in iterable: if 跳过条件: break # 结束循环

实例:

4.循环结合else的基本使用

实战效果:

5.字符串的基本使用和基本操作

5.1.1基本使用

三种创建方式:

单引号: str = 'hello world'
双引号创建: str = "hello world"
多行字符串创建: str = """ hello world hello world """

5.1.2基本操作(增删改查)

注意:字符串是不可变类型,所有的"增删改查"本质都是通过方法生成一个新的字符串,原字符串不改变.

1)增

定义一个原始字符串作为操作对象

s = "hello world" ================================================== 增(在原有字符串基础上扩充内容) ================================================== print("===== 增:拼接 =====") 1. 使用 + 拼接 new_s = s + " python" print(new_s) hello world python 2. 使用 * 重复 print("ab" * 3) ababab

2)删

定义一个原始字符串作为操作对象 s = "hello world" ================================================== 删(删除字符串中的指定内容) ================================================== print("===== 删:利用替换实现删除 =====") 1. 使用 replace 替换为空字符串实现"删除" print(s.replace("l", "")) heo word 删除所有l 2. 删除字符串两侧的同时,可指定删除的字符 print("###hello###".strip("#")) hello 删除指定的#字符 3. 切片思想:保留除了指定位置以外的内容 print(s[:2] + s[3:]) helo world 删除索引2位置的字符

(3)改

定义一个原始字符串作为操作对象 s = "hello world" ================================================== 改(替换/转换字符串的内容) ================================================== print("===== 改:替换 =====") 1. 替换指定内容 new_s = s.replace("world", "python") print(new_s) hello python print("===== 改:大小写转换 =====") 2. 大小写转换 print(s.upper()) HELLO WORLD 全部转大写 print(s.lower()) hello world 全部转小写 print("hello".capitalize()) Hello 首字母大写 print("===== 改:去除空白 =====") 3. 去除字符串两端的空白字符 str_space = " hello " print(str_space.strip()) hello 去掉两端空白 print(str_space.lstrip()) hello__ 去掉左边空白 print(str_space.rstrip()) __hello 去掉右边空白 print("===== 改:分割与拼接 =====") 4. 分割与拼接 list1 = s.split(" ") 按空格分割成列表 print(list1) ['hello', 'world'] str_list = ["a", "b", "c"] print("-".join(str_list)) a-b-c 用-将列表拼接成字符串

(4)查(读取字符串中的内容)

定义一个原始字符串作为操作对象 s = "hello world" ================================================== 查(读取字符串中的内容) ================================================== print("===== 查:索引取值 =====") 1. 通过索引取值(正向从0开始,反向从-1开始) print(s[0]) h print(s[-1]) d print(s[0:5]) hello 切片(含头不含尾) print(s[6:]) world 从索引6到末尾 print("===== 查:查找位置 =====") 2. 查找子串的位置 print(s.find("world")) 6,返回第一次出现的下标,找不到返回-1 print(s.index("o")) 4,功能同find,找不到会报错 print(s.count("l")) 3,统计子串出现次数 print("===== 查:判断 =====") 3. 判断 print(s.startswith("he")) True 是否以指定内容开头 print(s.endswith("ld")) True 是否以指定内容结尾 print("hello" in s) True 是否存在 print("abc" not in s) True 是否不存在

5.1.3实战示例:

切片操作,注意切片包含开始索引,不包含结束索引,所以结束索引要在原来的位置加1

身份证号码信息解析 id = input("请输入身份证号码: ") print(f"出生日期为:{id[6:14]}") if int(id[-2]) % 2 == 0: print("性别为女") else: print("性别为男")
用户名规范化处理 # strip()表示去除字符串首尾的空格字符 # title()表示每个单词首字母大写,其他字母小写 # capitalize()表示字符串的第一个字符大写,其他字符小写 name = input("请输入用户名: ") name = name.strip() name = name.title() print(name)
手机号脱敏显示 # replace()表示替换字符串中的子字符串,将前面的子字符串替换为后面的子字符串 # 注意:切片时,不包含结束索引,包含开始索引 phone = input("请输入手机号: ") if len(phone) == 11: print(f"手机号为:{phone.replace(phone[3:7], '****')}") else: print("手机号格式错误") count = phone.count("1") print(f"手机号中包含的1的数量为: {count}")
统计英文句子单词个数与最长单词 # max()表示返回列表中最大的元素,key=len表示根据元素的长度进行比较 sent = "hello, world. python" sent = sent.replace(",", "") sent = sent.replace(".", "") print(sent) list1 = sent.split(" ") print(list1) print(f"单词列表长度为:{len(list1)}") print(f"最长单词为:{max(list1, key=len)},长度为:{len(max(list1, key=len))}")
def highlight(text, keyword): keyword = [keyword] if isinstance(keyword, str) else keyword result = text for i in keyword: if i in result: result = result.replace(i, f"**{i}**") else: print("关键词不存在") return text return result print(highlight("我很喜欢python这门语言", "python")) print(highlight("我喜欢python和apple", ["python", "apple"])) print(highlight("hello world", "java"))

这里运用isinstance来判断输入内容是否是字符串,然后定义一个新变量来装列表内容,利用for循环结合else实现整体逻辑

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进